SDUT 2144 图结构练习——最小生成树(kruskal模版)
2012-06-13 15:05
323 查看
题目链接
真郁闷。。。模版题,由于自己SB错误,错了5 6 次。。。不过也有好处,加深对模版的理解了。。 kruskal 模版
真郁闷。。。模版题,由于自己SB错误,错了5 6 次。。。不过也有好处,加深对模版的理解了。。 kruskal 模版
#include <stdio.h> #include <stdlib.h> #include <string.h> int o[101],sum,num; struct edge//图的结构体 { int sv,ev,w;//起始边,终边,权值。 }; struct edge p[10000];//必须开到大于(n*n-1)/2,否则必然RE。。。 int comp(const void *a,const void *b) { return (*(struct edge*)a).w > (*(struct edge*)b).w ?1:-1; } int find(int x)//并查集find函数 { int a = x; while(a != o[a]) { a = o[a]; } return a; } void merge(int x,int y,int w)//并查集merge函数 { int x1,y1; x1 = find(x); y1 = find(y); if(x1 != y1) { o[x1] = y1; sum += w; num ++; } } int main() { int n,m,i; while(scanf("%d%d",&n,&m)!=EOF) { sum = 0; num = 1; for(i = 1;i <= n;i ++)//初始化并查集。。(擦,这里都出错了) o[i] = i; for(i = 0;i <= m-1;i ++) { scanf("%d %d %d",&p[i].sv,&p[i].ev,&p[i].w); } qsort(p,m,sizeof(p[0]),comp);//调用结构体快排 for(i = 0;i <= m-1;i ++) { merge(p[i].sv,p[i].ev,p[i].w); if(num == n) break;//终止条件,合并n-1次。 } printf("%d\n",sum); } return 0; }
相关文章推荐
- SDUT 2144 图结构练习——最小生成树 Kruskal
- SDUT 2144 图结构练习——最小生成树
- SDUT 2144 图结构练习——最小生成树
- SDUT 2144 图结构练习——最小生成树
- sdut 2144 图结构练习——最小生成树
- 【2144】图结构练习——最小生成树 (prim算法模板) (sdut)
- 【2144】图结构练习——最小生成树 (prim算法模板) (sdut)
- SDUT 2144 图结构练习-最小生成树
- sdut2144图结构练习——最小生成树
- SDUT 2144 图结构练习——最小生成树
- sdut 2144 图结构练习——最小生成树(最小生成树)
- SDUT-2144 图结构练习——最小生成树
- SDUT 2144 图结构练习——最小生成树
- [SDUT](2144)图结构练习——最小生成树 ---最小生成树(图)
- SDUT 2144 图结构练习——最小生成树
- SDUT 2144 图结构练习——最小生成树
- OJ2144图结构练习——最小生成树
- 图结构练习——最小生成树(Prim+Kruskal)
- SDUT2622--图结构练习——最小生成树
- 图结构练习——最小生成树 kruskal