【UVA10462】【好题】【次小生成树并查集算法】
来源:互联网 发布:2017苹果mac桌面壁纸 编辑:程序博客网 时间:2024/06/05 08:32
#include <iostream>#include <cstring>#include <cmath>#include <queue>#include <stack>#include <list>#include <map>#include <set>#include <string>#include <cstdlib>#include <cstdio>#include <algorithm>using namespace std;#define rep(i,a,n) for (int i=a;i<n;i++)#define per(i,a,n) for (int i=n-1;i>=a;i--)#define mp push_backint T;int n,m;struct Edge{ int u,v,w;}edge[30000];int used[30000];int cmp(Edge a,Edge b){ return a.w < b.w;}int F[15000];int len;int find(int x){ return F[x] == -1?x : find(F[x]);}int kru(int del){ for(int i=0;i<1400;i++) F[i] = -1; int ret = 0; for(int i=0;i<m;i++) { if(i == del) continue; int fx = find(edge[i].u); int fy = find(edge[i].v); if(fx != fy) { ret += edge[i].w; if(del == -1) used[len++] = i; F[fx] = fy; } } int fnums = 0; for(int i=1;i<=n;i++) { if(F[i] == -1) fnums ++; } if(fnums >= 2) return 0x3f3f3f3f; return ret;}int main(){ scanf("%d",&T); int C = 1; while(T --) { scanf("%d%d",&n,&m); len = 0; memset(used,0,sizeof(used)); for(int i=0;i<m;i++) { int u,v,w; scanf("%d%d%d",&edge[i].u,&edge[i].v,&edge[i].w); } sort(edge,edge+m,cmp); int stm = kru(-1); if(stm == 0x3f3f3f3f) { printf("Case #%d : No way\n",C++); continue; } int ans = 0x3f3f3f3f; for(int i=0;i<n-1;i++) { int del = used[i]; ans = min(ans,kru(del)); } if(ans == 0x3f3f3f3f) { printf("Case #%d : No second way\n",C++); } else { printf("Case #%d : %d\n",C++,ans); } }}
0 0
- 【UVA10462】【好题】【次小生成树并查集算法】
- uva10462 Is There A Second Way Left? (次小生成树)
- 严格次小生成树 并查集和数的综合应用
- uva10462-(带重边次小生成树)
- 随机迷宫生成算法(并查集+生成树)
- 次小生成树模板-prim算法
- 算法 最小生成树之 kruskal算法+并查集
- Kruscal算法+并查集 求解最小生成树
- Kruscal算法 并查集求解最小生成树
- 并查集 求解最小生成树 Kruscal算法
- poj1861最小生成树(并查集)-kruskal算法
- Jungle Roads + 最小生成树算法+ 并查集
- 最小生成树Kruskal算法+并查集实现
- 最小生成树kruskal算法(并查集)
- 并查集扩展之最小生成树Kruskal算法
- 最小生成树kruskal算法(并查集)
- 最小生成树算法--并查集实现
- 最小生成树Kruskal算法+并查集检查连通
- Linux之sed的用法
- 计算机网络面试整理【转】
- 【原题】求两个不相交的连续子数组的最大和
- 初识Mac
- 10gR2中RAC环境中手工创建实例和监听(Linux/Unix)
- 【UVA10462】【好题】【次小生成树并查集算法】
- Number()、parseInt()和parseFloat()数值转换
- java Swing事件分发线程
- 8.28总结
- 题目:克隆图
- mysql修改表、字段、库的字符集
- 题目:全排列
- GPU加速计算-工具介绍
- 题目:分割回文串 II