poj 1679 判断最小生成树是否唯一
来源:互联网 发布:周末网络国债理财 编辑:程序博客网 时间:2024/06/05 01:59
/*只需判断等效边和必选边的个数和n-1的关系即可*/#include<stdio.h>#include<stdlib.h>#define N 110struct node { int u,v,w;}f[N*N*2];int cmp(const void *a,const void*b) {return (*(struct node *)a).w-(*(struct node *)b).w;}int pre[N];int find(int x) { if(x!=pre[x]) pre[x]=find(pre[x]); return pre[x];}int main() { int t,n,m,i,j,sum,ff,total; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&m); for(i=1;i<=n;i++) pre[i]=i; for(i=0;i<m;i++) scanf("%d%d%d",&f[i].u,&f[i].v,&f[i].w); qsort(f,m,sizeof(f[0]),cmp); j=0;sum=0;ff=0;total=0; for(i=0;i<m&&ff<n-1;) { j=i; while(f[i].w==f[j].w&&j<m) { int a=find(f[j].u); int b=find(f[j].v); if(a!=b) sum++; j++; } j=i; while(f[i].w==f[j].w&&j<m&&ff<n-1) { int a=find(f[j].u); int b=find(f[j].v); if(a!=b) { pre[a]=b; ff++; // printf("%d %d\n",f[j].u,f[j].v); total+=f[j].w; } j++; } i=j; } if(sum>n-1) printf("Not Unique!\n"); else printf("%d\n",total); }return 0;}
0 0
- poj 1679 判断最小生成树是否唯一
- POJ 1679 判断最小生成树是否唯一
- poj 1679 判断最小生成树是否唯一
- POJ 1679 判断最小生成树是否唯一
- poj 1679 判断最小生成树是否唯一(kruskal)
- poj 1679 判断最小生成树是否唯一
- POJ --- 1679 【判断最小生成树是否唯一】
- POJ 1679 The Unique MST 判断最小生成树是否唯一/次小生成树
- poj 1679 The Unique MST(判断最小生成树是否唯一)
- POJ:1679 The Unique MST(判断最小生成树是否唯一)
- poj 1679 The Unique MST(判断最小生成树是否唯一)
- POJ 1679 The Unique MST (判断最小生成树是否唯一)
- poj-1679 The Unique MST 判断最小生成树是否唯一
- poj 1679 The Unique MST (判断最小生成树是否唯一)
- poj 1679 The Unique MST (判断最小生成树是否唯一)
- POJ 题目1679The Unique MST(判断最小生成树是否是唯一的)
- POJ 1679 The Unique MST(判断最小生成树是否唯一)
- POJ 1679 The Unique MST 判断最小生成树是否唯一
- 理解用setTag 和 Viewholder 来优化listView
- UVa 10129 Play on Words
- HDU1010 Tempter of the Bone 【DFS】+【剪枝】
- 线性表-顺序存储结构之顺序表
- NSString的集中常用操作以及与NSMutableString
- poj 1679 判断最小生成树是否唯一
- 传智播客基础班学习总结
- OC内存管理初级演练
- hdu 2141
- HDU 4952 Number Transformation (找规律)
- 马士兵struts2视频教程第二十九集
- 【黑马程序员】Java集合类
- hdu 2005 第几天?
- 1408141706-hd-Moving Tables.cpp