fzu 2087并查集的运用求最小生成树的等效边
2014-05-04 09:18
155 查看
//对数组排序后,对于边相同并且边的两端不在一个集合内的一定是等效边或者必加边,
//第一数数,第二合并集合
#include<stdio.h> #include<stdlib.h> #define N 110000 int pre[N]; struct node { int x,y,w; }ma[N]; int findd(int x) { if(x!=pre[x]) pre[x]=findd(pre[x]); return pre[x]; } int cmp(const void *a,const void*b) { return (*(struct node *)a).w-(*(struct node *)b).w; } int main() { int n,m,i,j,k,cou,t,a,b,c; 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",&ma[i].x,&ma[i].y,&ma[i].w); qsort(ma,m,sizeof(ma[0]),cmp); cou=0; c=0;k=0;j=0; for(i=0;i<m&&k<n-1;) { while(ma[c].w==ma[j].w) { a=findd(ma[j].x); b=findd(ma[j].y); if(a!=b) cou++; j++; } j=i; while(ma[c].w==ma[j].w) { a=findd(ma[j].x); b=findd(ma[j].y); if(a!=b) { pre[b]=a; k++; } j++; } c=j; i=j; } printf("%d\n",cou); } return 0; }
相关文章推荐
- fzu 2087并查集的运用求最小生成树的等效边
- FZU - 2254 英语考试 (最小生成树)
- FZU 2254 英语考试 (最小生成树)(福州大学第十四届程序设计竞赛)
- fzu 2087 统计树边 (最小生成树kruskal)
- FZU 2254 英语考试 (最小生成树)(福州大学第十四届程序设计竞赛)
- 英语考试 FZU - 2254 最小生成树
- HDOJ1102 最小生成树简单运用
- FZU 2254 英语考试 (最小生成树)(福州大学第十四届程序设计竞赛)
- FZU 2254 英语考试 (最小生成树)(福州大学第十四届程序设计竞赛)
- FZU2254 英语考试(最小生成树,Prim)(福州大学第十四届程序设计竞赛)
- FZU 2087 统计树边(最小生成树/找出有多少条边,它至少在一个最小生成树里)
- [ACM] FZU 2087 统计数边 (有多少边至少存在一个最小生成树里面)
- FZU 2254 英语考试 (最小生成树)(福州大学第十四届程序设计竞赛)
- FZU - 2254 英语考试(最小生成树)
- FZU 2254 英语考试 (最小生成树)(福州大学第十四届程序设计竞赛)
- FZU 2087 统计树边(最小生成树)
- FZU 2254 英语考试 (最小生成树)(福州大学第十四届程序设计竞赛)
- poj2349Arctic Network (最小生成树运用)
- fzu 1963 交通建设(最小生成树)
- FZU 2254 英语考试 (最小生成树)(福州大学第十四届程序设计竞赛)