POJ1679 The Unique MST
2013-08-05 21:15
232 查看
题意: 问给定的图求最小生成树是否唯一
解法: 课本裸题,给权值相同的边作标记,过一遍最小生成树,然后把有使用到的带标记边逐一去掉来检验最小生成树是否唯一
Kruskal。
解法: 课本裸题,给权值相同的边作标记,过一遍最小生成树,然后把有使用到的带标记边逐一去掉来检验最小生成树是否唯一
Kruskal。
#include <stdio.h> #include <string.h> #include <algorithm> using namespace std; typedef __int64 lld; const int INF = ~0u>>1; #define REP(i,a,b) for(int i=(a); i<(b); i++) #define FOR(i,a,b) for(int i=(a); i<=(b); i++) #define clr(a,b) memset(a,b,sizeof(a)) const int MAXN = 110; int n,m; struct edge { int u,v,w; int col; int mark; int ban; bool operator < (const edge &tt) const { return w < tt.w; } }g[MAXN*MAXN*MAXN]; int fa[MAXN]; int ok; int first; int Find(int x) { return fa[x] = (fa[x] == x) ? x : Find(fa[x]); } int merge(int a, int b) { a = Find(a); b = Find(b); if(a == b) return 0; fa[a] = b; return 1; } lld Kruskal() { lld ret = 0; FOR(i,0,n) fa[i] = i; REP(i,0,m) { if(g[i].ban) continue; if(merge(g[i].u,g[i].v)) { ret += (lld)g[i].w; if(first && g[i].col) g[i].mark = 1, ok = 0; } } return ret; } int main() { int cas; scanf("%d", &cas); while(cas--) { scanf("%d%d", &n ,&m); REP(i,0,m) { scanf("%d%d%d", &g[i].u,&g[i].v,&g[i].w); g[i].col = 0; g[i].mark = 0; g[i].ban = 0; } sort(g,g+m); REP(i,1,m) { if(g[i].w == g[i-1].w) { g[i].col = g[i-1].col = 1; } } lld ans; ok = 1; first = 1; ans = Kruskal(); if(ok) printf("%I64d\n", ans); else { int i; first = 0; for(i=0; i<m; i++) { if(g[i].mark == 1) { g[i].ban = 1; lld tt = Kruskal(); if(tt == ans) break; g[i].ban = 0; } } if(i != m) printf("Not Unique!\n"); else printf("%I64d\n", ans); } } return 0; }
相关文章推荐
- poj1679——The Unique MST
- POJ-1679(The Unique MST) 次小生成树
- POJ 1679 The Unique MST 【用次小生成树验证最小生成树是否唯一】
- The Unique MST(poj 1679)
- poj 1679 The Unique MST (次小生成树)
- POJ 1679 The Unique MST
- poj 1679 The Unique MST(次小生成树)
- POJ1679 The Unique MST(Kruskal)(最小生成树的唯一性)
- poj1679 The Unique MST(判定次小生成树)
- POJ-1679-The Unique MST [最小生成树][次小生成树]
- POJ 1679 The Unique MST(次小生成树)
- poj 1679 The Unique MST
- POJ-1679-The Unique MST
- POJ 1679 The Unique MST (最小生成树)
- POJ 1679 The Unique MST
- POJ 1679 The Unique MST(判断MST的唯一性)
- POJ 1679 The Unique MST
- [poj 1679] The Unique MST---(翻译:次小生成树)
- poj 1679 次小生成树 The Unique MST
- poj 1679 The Unique MST