The Unique MST--hdoj
2015-08-13 19:53
363 查看
The Unique MST
Time Limit : 2000/1000ms (Java/Other) Memory Limit : 20000/10000K (Java/Other)Total Submission(s) : 25 Accepted Submission(s) : 8
[align=left]Problem Description[/align]
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'.
[align=left]Input[/align]
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.
[align=left]Output[/align]
For each input, if the MST is unique, print the total cost of it, or otherwise print the string 'Not Unique!'.
[align=left]Sample Input[/align]
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
[align=left]Sample Output[/align]
3
Not Unique!
[align=left]Source[/align]
PKU
有时候最小生成树不止一个,举个例子,某一个点以min进入当前的集合,但是进去之后又发现他与好几个在集合中的点的距离都是min,这也就说明,他连哪一个点都是一样的,所以此时的最小生成树不止一个。代码:
#include<stdio.h> #include<string.h> #define INF 0xfffffff int n,m; int map[1010][1010],dis[1010],mark[1010]; void prim() { int i,min,flag,j,sum=0,k,w=1; memset(mark,0,sizeof(mark)); mark[1]=1; for(i=2;i<=n;i++) { min=INF; flag=-1; k=0; for(j=1;j<=n;j++) { if(!mark[j]&&map[1][j]<min) { min=map[1][j]; flag=j; } } for(j=1;j<=n;j++) { if(mark[j]&&map[flag][j]==min) {/*因为mark[1]已经标记过了,所以此时如果出现两个及其以上的点, 到flog的距离都是min,当然,仅限于已经连过的点,此时最小生成树就不止一种*/ k++; } } //printf("%d ",k); if(k>=1) { w=0; break; } mark[flag]=1; sum+=min; for(j=1;j<=n;j++) { if(!mark[j]&&map[1][j]>map[flag][j]) map[1][j]=map[flag][j]; } } if(w) printf("%d\n",sum); else printf("Not Unique!\n"); } 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++) map[i][j]=INF; //map[i][i]=0; } while(m--) { int a,b,c; scanf("%d%d%d",&a,&b,&c); map[a][b]=map[b][a]=c; } prim(); } }
相关文章推荐
- The Unique MST--hdoj
- HDU1711-Number Sequence-KMP算法(模板)
- 代码手写UI,xib和StoryBoard间的博弈
- UITableView 的编辑
- UITextField 详解
- 配置UIAutomator中的ANT环境报不是内部命令与外部命令
- SOAPUI 循环设置
- SOAPUI 属性传递之二
- SOAPUI 数据源设置
- iOS开发UI中懒加载的使用方法
- UITableViewCell左侧会有默认15像素的空白
- SOAPUI 属性设置
- 关于自定义UITableViewCell布局点击Cell消失的问题
- 手写输入法输入 [UIKBBlurredKeyView candidateList]
- 获取UITableView每行中不同的UITextField输入的内容
- MySQL 5.6 中TIMESTAMP with implicit DEFAULT value is deprecated错误
- 【Android和iOS】快速切换到主线程更新UI
- UITabBarController
- AutoLayout初战----Masonry与FDTemplateLayoutCell实践
- UITextField总结