UVA 10600 ACM Contest and Blackout(最小生成树)
来源:互联网 发布:曼哈顿软件 招聘 编辑:程序博客网 时间:2024/05/21 19:13
题意:
给你点和边,求出最小生成树 和 次小生成树。
思路:
先求一次最小生成树,然后标记每一条边,依次删除,再求最小生成树,从中找到最小的就是次小生成树了。
代码:
import java.util.Scanner;import java.util.Comparator;import java.util.Arrays;class Node{public int u, v, w, mark;}//结构排序class mycmp implements Comparator<Node>{public int compare(Node A, Node B){ return A.w - B.w; } }public class Main {final static int MAXN = 10000 + 13;final static int INF = 0x3f3f3f3f;static int[] pre = new int[MAXN];static Node[] map = new Node[MAXN];public static void main(String[] args){Scanner sc = new Scanner(System.in);int T = sc.nextInt();while(T != 0){int N,M;N = sc.nextInt();M = sc.nextInt();for(int i = 1; i <= M; i++){map[i]=new Node(); map[i].u = sc.nextInt();map[i].v = sc.nextInt();map[i].w = sc.nextInt();map[i].mark = 0;}mst(N);Arrays.sort(map, 1, M + 1, new mycmp());int mst = ksu(N, M); // MSTint sst = INF + 1; //SST 初始化for(int i = 1; i <= M; i++){ //求SSTif(map[i].mark == 1){ //这条边属于MSTmst(N);int temp = ksu(N, M, i); //删除一条边后得到的结果、如果大于 0 说明构造成功,否则构造失败if(temp < sst && temp != -1){ sst = temp;}}}System.out.println(mst + " " + sst);T--;}sc.close();}public static int ksu(int N, int M){ //求MSTint cnt = 0;int ans= 0;for(int i = 1; i <= M; i++){int fu = Find(map[i].u);int fv = Find(map[i].v);if(fu != fv){ans += map[i].w;cnt++;pre[fv] = fu;map[i].mark = 1; //标记}if(cnt == N - 1){return ans;}}return ans;}public static int ksu(int N, int M,int mark){ //删除 mark 这条边 求 MSTint ans= 0;int cnt = 0;for(int i = 1; i <= M; i++){if(i == mark) continue; //删除int fu = Find(map[i].u);int fv = Find(map[i].v);if(fu != fv){ans += map[i].w;cnt++;pre[fv] = fu;}if(cnt == N - 1){return ans;}}return -1;}public static int Find(int x){return x == pre[x] ? x : (pre[x] = Find(pre[x]));}public static void debug(int M){for(int i = 1; i <= M; i++){System.out.println(i + " " + map[i].u + " " + map[i].v + " " + map [i].w + " "+ map[i].mark);}}public static void mst(int N){for(int i = 1; i <= N; i++){pre[i] = i;}}}
0 0
- UVa 10600 - ACM Contest and Blackout(最小生成树)
- UVA 10600 ACM Contest and Blackout(最小生成树)
- UVA 10600 ACM Contest and Blackout(最小生成树and次小生成树)
- UVA 10600 - ACM Contest and Blackout(最小生成树&次小生成树)
- (beginer) 最小生成树 UVA 10600 ACM Contest and Blackout
- uVA 10600 ACM Contest and Blackout (prim求次小生成树)
- UVA 10600 - ACM Contest and Blackout 次小生成树
- 【UVa】10600 ACM Contest and Blackout 次小生成树
- uva 10600 ACM Contest and Blackout(次小生成树)
- UVA 10600 ACM Contest and Blackout (次小生成树)
- UVA - 10600 ACM Contest and Blackout(次小生成树)
- Uva 10600 ACM Contest and Blackout(次小生成树)
- UVa:10600 ACM Contest and Blackout
- UVa 10600 - ACM Contest and Blackout
- UVA 10600 ACM Contest and Blackout
- UVA 10600 ACM Contest and Blackout
- UVA--10600---ACM Contest and Blackout
- UVa 10600 ACM contest and Blackout( 次小生成树)
- FlatButton
- 8. String to Integer (atop)【E】【67】【leetcode】
- keyWindow
- 自定义函数分块实现功能
- 复习——查看历史命令前十
- UVA 10600 ACM Contest and Blackout(最小生成树)
- iOS UIImage 转NSString
- Tsinsen A1102 字符串编辑
- HDU1062 Text Reverse
- 补间动画(Tween Animation)
- 乘法口诀表,你是咋想的?
- HTML表格使用
- java设计模式之门面模式
- TextView内容过长加省略号