The Unique MST 1679(最小生成树的不唯一性)
2015-08-13 15:45
681 查看
The Unique MST
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
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 24076 | Accepted: 8551 |
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!
#include<stdio.h> #include<string.h> #define mx 0xfffffff int g[110][110],v[110],dis[110]; int n,m; void prim() { int i,j,k,flag,min,sum=0; memset(v,0,sizeof(v)); for(i=1;i<=n;i++) dis[i]=g[1][i]; dis[1]=0; v[1]=1; for(j=1;j<n;j++) { min=mx;k=1;flag=0; for(i=1;i<=n;i++) { if(!v[i]&&dis[i]<min) { min=dis[i]; k=i; } } for(i=1;i<=n;i++) { if(v[i]&&g[k][i]==min) { flag++; } } if(flag>1) { printf("Not Unique!\n"); return ; } sum+=min; v[k]=1; for(i=1;i<=n;i++) { if(!v[i]&&dis[i]>g[k][i]) dis[i]=g[k][i]; } } printf("%d\n",sum); } int main(){ int t; scanf("%d",&t); while(t--) { int i,j; scanf("%d%d",&n,&m); for(i=0;i<=n;i++) { for(j=0;j<=n;j++) { if(i==j) g[i][j]=0; else g[i][j]=mx; } } while(m--) { int a,b,c; scanf("%d%d%d",&a,&b,&c); if(g[a][b]>c) g[a][b]=g[b][a]=c; } prim(); } return 0; }
相关文章推荐
- UE3 移动设备主页
- Handler的实现原理及其与Message、MessageQueue关系详解
- ORA-01002 fetch out of sequence
- HDOJ-1242-Rescue
- HDU 1005 Number Sequence
- iOS开发 Xcode上使用xib时,查看UI在不同屏幕尺寸的效果
- UISwitch——开关控件
- EasyUI datagrid数据表格--获取datagrid中选中行的数据
- QuizCardPlayer
- QuizCardBuilder
- Angular ui-grid 2.0 与 3.0 版本区别
- 交互设计师学习之路:第一天 色彩学习
- Android UI 之 Tab类型界面总结
- iOS UITableView UIScrollView 的支持触摸事件
- Bluetooth Core specification 4.2 主要更新
- mysql 慢日志分析工具pt-query-digest
- easyui导入文件的顺序
- VS2013 “未找到与约束 ContractName Microsoft.Internal.VisualStudio.PlatformUI.ISolutionAttachedCollectionService RequiredTypeIdentity Microsoft.Internal.VisualStudio.PlatformUI.ISolutionAttachedCollectionService 匹配的导出”
- poj-1458-Common Subsequence(LCS)
- 简单的Queue