博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
杭电2682--Tree(Prim)
阅读量:6323 次
发布时间:2019-06-22

本文共 1976 字,大约阅读时间需要 6 分钟。

我也是醉了, 无限WA 。

注意一下使用邻接矩阵时循环语句的不同处。 

1 for(int i = 1; i <= n; i++)  for(int j  = i; j  <= n; j++)  map[i][j]=map[j][i]=(i==j?0:INF)  2 3 和普通写法区别。

 

#include 
#include
#include
#include
#define M 601 #define N 1000001using namespace std;const int INF = 0x3f3f3f3f;int sieve[N*2], dis[M], vis[M], Rode[M], map[M][M];int n;int Min(int a, int b){ if(a < b) return a; else return b;}void Is_Prime(){ memset(sieve, 0, sizeof(sieve)); sieve[0] = sieve[1] = 1; for(int i = 2; i < N*2; i++) { if(!sieve[i]) for(int j = 2*i; j < N*2; j += i) sieve[j] = 1; }}void Prime(){ int sum = 0; memset(vis, 0, sizeof(vis)); for(int i = 1; i <= n; i++) dis[i] = map[1][i]; vis[1] = 1; for(int i = 1; i < n; i++) { int temp = 1, min = INF; for(int j = 1; j <= n; j++) { if(!vis[j] && dis[j] < min) { temp = j; min = dis[j]; } } if(min == INF) { printf("-1\n"); return; } vis[temp] = 1; sum += min; for(int j = 1; j <= n; j++) if(!vis[j] && dis[j] > map[temp][j]) dis[j] = map[temp][j]; } printf("%d\n", sum);}int main(){ int T; scanf("%d", &T); Is_Prime(); while(T--) { scanf("%d", &n); for(int i = 1; i <= n; i++) scanf("%d", &Rode[i]); for(int i = 1; i <= n; i++) for(int j = 1; j <= n; j++) map[i][j] = (i==j?0:INF); for(int i = 1; i <= n; i++) for(int j = 1; j <= i; j++) if(!sieve[Rode[i]] || !sieve[Rode[j]] || !sieve[Rode[i] + Rode[j]]) map[i][j] = map[j][i] = Min(Min(Rode[i], Rode[j]), abs(Rode[i]-Rode[j])); Prime(); } return 0; }

 

转载于:https://www.cnblogs.com/soTired/p/4816588.html

你可能感兴趣的文章
Kubernetes部分Volume类型介绍及yaml示例
查看>>
MySQL5.5编译工具configure向cmake过渡指南
查看>>
day12:usermod及用户密码管理
查看>>
Mysql常用函数
查看>>
PHP工程师面临的成长瓶颈
查看>>
grub.conf详解
查看>>
idea 项目多开变通的解决方案
查看>>
记录编译安装Tengine+PHP-FPM运行 WordPress 的过程.
查看>>
游戏中发送道具奖励的概率算法
查看>>
Speed Tree
查看>>
android超炫的图片浏览器
查看>>
我的友情链接
查看>>
mysql 在线安装sphinx存储引擎
查看>>
我的友情链接
查看>>
maven添加本地jar包
查看>>
Exchange2013 RTM安装初体验(一)
查看>>
LDAP是什么?
查看>>
编辑内核kernel
查看>>
自增自减
查看>>
局部变量与全局变量
查看>>