fzu 2087并查集的运用求最小生成树的等效边
来源:互联网 发布:女生电脑包 知乎 编辑:程序博客网 时间:2024/05/16 12:49
//对数组排序后,对于边相同并且边的两端不在一个集合内的一定是等效边或者必加边,
//第一数数,第二合并集合
#include<stdio.h>#include<stdlib.h>#define N 110000int 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;}
0 0
- fzu 2087并查集的运用求最小生成树的等效边
- Kruskal——求无向图的最小生成树+并查集
- DS-7.1实现求最小生成树的克鲁斯卡尔算法(并查集实现)
- 最优生成树 并查集和贪心的运用
- 并查集中的最小生成树
- poj1861 最小生成树和并查集的题
- 最小生成树,并查集的思想 nyoj1239
- [bzoj1083][并查集][最小生成树]繁忙的都市
- poj-3723【图的最小生成树+并查集】
- 并查集和最小生成树的总结
- 并查集实现最小生成树的kruskal算法
- 1090. Highways(用并查集找出最小生成树,输出最小生成树中最长的边
- 并查集的运用
- fzu 2155 并查集的删除
- 并查集与最小生成树
- 并查集模版&最小生成树
- 最小生成树kruscal+并查集
- 并查集+最小生成树_HDU_1102
- sayhi setup Alpha版
- delphi的取整函数round、trunc、ceil和floor
- C#Winform获取本机IP地址的解决方案
- Eclipse快捷键
- Money Systems _DP
- fzu 2087并查集的运用求最小生成树的等效边
- Appler即时通讯
- iOS越狱开发环境搭建 theos
- java中的String类常量池 (你都懂了吗?)
- MSP430的应用笔记
- JAVA的内存泄漏(说的很好)
- 高性能TCPServer
- Java中xxx.class.getResource和xxx.class.getClassLoader().getResource()的区别
- listview所带来的滑动冲突