次小生成树
2017-08-22 01:01
162 查看
The Unique MST POJ - 1679
const int LEN = 100000;//有多少条边 const int LEN2 = 110;//有多少个点 int N,M; struct Node { int x; int y; int weight; }; Node node[LEN]; bool operator <(const Node &a,const Node &b) { return a.weight < b.weight; } bool cmp(const Node &a,const Node &b) { return a.weight < b.weight; } int sign1[LEN]; int Max_edge[LEN2][LEN2];//最小生成树从i到j最权值最大边的权值 int Matrix[LEN2][LEN2]; bool sign[LEN2][LEN2]; int F[LEN2]; int vis[LEN2]; void Init(void) { me(sign1); for(int i = 0; i <= N; ++i) F[i] = i; me(sign); me(vis); } int Find(int x) { return x == F[x]?x:F[x] = Find(F[x]); } void Dfs(int x) { for(int i =1; i <= N; ++i) { if(sign[x][i]&&!vis[i]) { Max_edge[x][i] = Max_edge[i][x] = Matrix[x][i]; for(int j = 1; j <= N; ++j) { if(vis[j]&&j!=x) { Max_edge[i][j] = Max_edge[j][i] = max(Max_edge[j][x],Max_edge[x][i]); } } vis[i] = 1; Dfs(i); } } } int main() { int T; cin>>T; while(T--) { cin>>N>>M; if(M>0) { Init(); for(int i = 0; i < M; ++i) { scanf("%d %d %d",&node[i].x,&node[i].y,&node[i].weight); Matrix[node[i].x][node[i].y] = Matrix[node[i].y][node[i].x] = node[i].weight; } sort(node,node+M); int All_cost = 0; for(int i = 0; i < M; ++i) { int x = Find(node[i].x); int y = Find(node[i].y); if(x!=y) { sign[node[i].x][node[i].y] = sign[node[i].y][node[i].x] = 1; F[x] = y; sign1[i] = 1; All_cost += node[i].weight; } } vis[1] = 1; Dfs(1); int flag = 0; for(int i = 0; i < M; ++i) { if(!sign1[i]&&node[i].x!=node[i].y) { if(Max_edge[node[i].x][node[i].y] >= node[i].weight) { flag = 1; break; } } } if(flag) printf("Not Unique!\n"); else printf("%d\n",All_cost); } else cout<<0<<endl; } return 0; }
相关文章推荐
- 两种迷宫生成算法
- sso 作用域 窃取cookie 跨站 php 生成png 程序代码
- c++生成随机数
- 分享一个面向EntityFramework的代码生成工具(源码)
- Asp.Net生成验证码
- C#生成中文汉字验证码源码
- eclipse 生成javadoc编码错误解决方案
- 菜鸟学Java(六)——简单验证码生成(Java版)
- 数据结构之 图的最小生成树
- Kruskal算法求解最小生成树
- 动态生成Checkbox,并且加载时有loadMask提示
- Java中生成一个唯一值的方式
- 生成四位随机数,用于登录验证码制作。
- Effective C++:条款06:若不想使用编译器自动生成的函数,就该明确拒绝。
- (转)Office编程在dot Net环境中总结(Word生成表格报表篇)
- iOS自动生成各种icon的工具 (希望有时间写一个简单文档)
- java poi 生成execl
- 润乾报表在不重新计算已生成报表的前提下隐藏页面单元格
- java生成二维码
- 用 appledoc 生成文档