最小生成树
来源:互联网 发布:郭靖黄蓉爱情知乎 编辑:程序博客网 时间:2024/05/18 02:21
hdu 2682 最小生成树
分类: 练习 2013-05-09 08:00 152人阅读 评论(0)收藏 举报
ACMC算法图论最小生成树
http://acm.hdu.edu.cn/showproblem.php?pid=2682
题目大意:T组测试实例,每组实例有n个城市,每个城市有一个幸福指数V;如果 Va 或 Vb 或 Va+Vb 是素数的话,两个城市可以连接起来;将两个城市连接起来所需的花费为min(min(Va,Vb),|Va-Vb|);如果所有的城市都能连接起来的话输出最小花费,否则输出“-1”;
- #include<iostream>
- #include<stdio.h>
- #include<string.h>
- #include<stdlib.h>
- #include<math.h>
- #include<algorithm>
- #define MAX 1000006
- #define min(a,b) ((a)<(b)?(a):(b))
- using namespace std;
- int prime[MAX];
- int set[606];
- struct node
- {
- int a,b,len;
- }map[180000];
- int cmp(constvoid* a,constvoid*b)
- {
- return (*(node*)a).len-(*(node*)b).len;
- }
- //并查集
- int find(int x)
- {
- if(set[x]!=x){
- set[x]=find(set[x]);
- }
- return set[x];
- }
- int Union(int a,int b)
- {
- int x=find(a);
- int y=find(b);
- if(x==y)
- return 0;
- set[x]=y;
- return 1;
- }
- int main()
- {
- int T,n,i,j,k,temp,cnt,cost;
- //筛选法求素数
- memset(prime,0,sizeof(prime));
- prime[0]=1;
- prime[1]=1;
- for(i=2;i<MAX;i++){
- if(prime[i]==0){
- for(j=2;j<MAX;j++){
- temp=i*j;
- if(temp>MAX)break;
- prime[temp]=1;
- }
- }
- }
- scanf("%d",&T);
- while(T--){
- scanf("%d",&n);
- for(i=0;i<n;i++){
- scanf("%d",&set[i]);
- }
- //建图
- for(i=0,k=0;i<n;i++){
- for(j=i+1;j<n;j++){
- if(prime[set[i]]==0 || prime[set[j]]==0 || prime[set[i]+set[j]]==0){
- map[k].a=i;
- map[k].b=j;
- map[k++].len=min(min(set[i],set[j]),abs(set[i]-set[j]));
- }
- }
- }
- qsort(map,k,sizeof(map[0]),cmp);
- for(i=0;i<n;i++){
- set[i]=i;
- }
- for(i=0,cnt=0,cost=0;i<k;i++){
- if(Union(map[i].a,map[i].b)==1){
- cost+=map[i].len;
- cnt++;
- }
- }
- if(cnt==(n-1))
- printf("%d\n",cost);
- else
- printf("-1\n");
- }
- return 0;
- }
- 最小比例 最小生成树
- 最小生成树&&次最小生成树
- 最小生成生成树计数
- 树+最小生成树
- 最小生成树
- 最小生成树 MST
- 最小生成树Kruskal
- kruskal 最小生成树
- 最小生成树
- 最小生成树
- 最小生成树
- 最小生成树
- 最小生成树 MST
- 最小生成树问题
- 最小生成树
- 最小生成树
- 最小生成树
- 最小生成树
- c语言要点摘录(21~24 数组与指针-上)
- 64位时间戳实现
- 游戏数据的捕捉(郁金香学习笔记)
- 删除可执行文件的图标
- hdu2767Proving Equivalences(强连通+缩点)
- 最小生成树
- HDU 4354 Missile 树的最大独立集+枚举
- D3D混合纹理
- js 当中的预编译
- 离散化 和多维线段树
- 嵌入式开发基础----register和volatile关键字
- Oracle sql语句
- C可变参数的函数
- nbutoj1482