POJ - 1679 The Unique MST
2017-08-27 10:16
302 查看
[align=center]The Unique MST[/align]
Description
Given a connected undirected graph, tell if its minimum spanning tree is unique.
Definition 1 (Spanning Tree): Consider a connected, undirected graph G = (V, E). A spanning tree of G is a subgraph of G, say T = (V', E'), with the following properties:
1. V' = V.
2. T is connected and acyclic.
Definition 2 (Minimum Spanning Tree): Consider an edge-weighted, connected, undirected graph G = (V, E). The minimum spanning tree T = (V, E') of G is the spanning tree that has the smallest total cost. The total cost of T means the sum of the weights on all
the edges in E'.
Input
The first line contains a single integer t (1 <= t <= 20), the number of test cases. Each case represents a graph. It begins with a line containing two integers n and m (1 <= n <= 100), the number of
nodes and edges. Each of the following m lines contains a triple (xi, yi, wi), indicating that xi and yi are connected by an edge with weight = wi. For any two nodes, there is at most one edge connecting them.
Output
For each input, if the MST is unique, print the total cost of it, or otherwise print the string 'Not Unique!'.
Sample Input
Sample Output
Source
POJ Monthly--2004.06.27 srbga@POJ
题意:
问是否存在次小生成树,如果存在输出'Not Unique!'. 否则输出最小生成树的权值和
思路:
用prime算法,每找到一条路就从重新开始判断走过的路中是否存在多条可以到此点(代码中p点)的路,并且距离相等,存在说明有次小生成树,否则没有。
代码:
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 31842 | Accepted: 11506 |
Given a connected undirected graph, tell if its minimum spanning tree is unique.
Definition 1 (Spanning Tree): Consider a connected, undirected graph G = (V, E). A spanning tree of G is a subgraph of G, say T = (V', E'), with the following properties:
1. V' = V.
2. T is connected and acyclic.
Definition 2 (Minimum Spanning Tree): Consider an edge-weighted, connected, undirected graph G = (V, E). The minimum spanning tree T = (V, E') of G is the spanning tree that has the smallest total cost. The total cost of T means the sum of the weights on all
the edges in E'.
Input
The first line contains a single integer t (1 <= t <= 20), the number of test cases. Each case represents a graph. It begins with a line containing two integers n and m (1 <= n <= 100), the number of
nodes and edges. Each of the following m lines contains a triple (xi, yi, wi), indicating that xi and yi are connected by an edge with weight = wi. For any two nodes, there is at most one edge connecting them.
Output
For each input, if the MST is unique, print the total cost of it, or otherwise print the string 'Not Unique!'.
Sample Input
2 3 3 1 2 1 2 3 2 3 1 3 4 4 1 2 2 2 3 2 3 4 2 4 1 2
Sample Output
3 Not Unique!
Source
POJ Monthly--2004.06.27 srbga@POJ
题意:
问是否存在次小生成树,如果存在输出'Not Unique!'. 否则输出最小生成树的权值和
思路:
用prime算法,每找到一条路就从重新开始判断走过的路中是否存在多条可以到此点(代码中p点)的路,并且距离相等,存在说明有次小生成树,否则没有。
代码:
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace std; #define INF 0x3f3f3f3f int n,m; int dis[105][105],dist[105]; int vis[105]; void prime(){ int sum=0; memset(vis,0,sizeof(vis)); for(int i=1;i<=n;i++){ dist[i]=dis[1][i]; } vis[1]=1; m=n-1; while(m--){ int minx=INF; int p=0; for(int i=1;i<=n;i++){ if(!vis[i] && dist[i]<minx){ minx=dist[i]; p=i; } } if(p==0)break; int k=0; for(int i=1;i<=n;i++){//重新查找走过的路中是否还有此距离的最短路 if(vis[i] && dis[i][p]==minx){ k++;//每找到一条总数加一 } } if(k>1){//当超过一条时表示存在多条路 printf("Not Unique!\n"); return ; } vis[p]=1; sum+=minx; for(int i=1;i<=n;i++){ if(!vis[i] && dist[i]>dis[i][p]) dist[i]=dis[i][p]; } } printf("%d\n",sum); } int main(){ int t; scanf("%d",&t); while(t--){ scanf("%d%d",&n,&m); int a,b,c; memset(dis,INF,sizeof(dis)); for(int i=0;i<m;i++){ scanf("%d%d%d",&a,&b,&c); dis[a][b]=dis[b][a]=min(dis[a][b],c); } prime(); } return 0; }
相关文章推荐
- poj 1979 DFS
- poj-3463 Sightseeing
- dfs-poj1979
- POJ 1236 Network of Schools
- POJ 3463 Sightseeing
- poj 2001 Shortest Prefixes
- POJ 1816 字典树+DFS
- POJ--3176--Cow Bowling
- 图的最大匹配问题: poj_1469
- ACM: 图论题 poj 2240 (floyd + ST…
- Poj 2533 The Bottom of a Graph【强连通Tarjan】
- poj 2723 Get Luffy Out(2-sat构图题)
- poj1797——Heavy Transportation(最大生成树)
- POJ--1655--Balancing Act--简单树形DP
- poj 2418 Hardwood Species
- POJ 3561 Pseudographical recognizer 模拟
- [POJ][1755][Triathlon][半平面交]
- poj/pku 2594 (最小路径覆盖)
- 【数据结构】poj 1338 (pair,priority_queue)
- POJ2142——The Balance