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

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! 题意:t组测试数据,n个点,m条边,求最小生成树是否唯一。唯一则输出最小生成树的边劝和,否则输出Not Unque!。 没打过次小生成树,然后乱搞一通,似乎数据很水,莫名其妙的过掉了?!!
代码:
//Serene
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<cmath>
using namespace std;
const int maxn=100+10,maxm=maxn*maxn;
int T,n,m,ans,mi[12]; int aa;char cc;
int read() {
aa=0;cc=getchar();
while(cc<'0'||cc>'9') cc=getchar();
while(cc>='0'&&cc<='9') aa=aa*10+cc-'0',cc=getchar();
return aa;
} struct Line{
int x,y,z;bool usd;
}li[maxm]; bool cmp(const Line& a,const Line& b) {return a.z<b.z;} int fa[maxn][12];
int find(int x) {return fa[x][0]==x? x:fa[x][0]=find(fa[x][0]);} int fir[maxn],nxt[2*maxn],to[2*maxn],e=0,v[2*maxn];
void add(int x,int y,int z) {
to[++e]=y;nxt[e]=fir[x];fir[x]=e;v[e]=z;
to[++e]=x;nxt[e]=fir[y];fir[y]=e;v[e]=z;
} void Kr() {
int tot=0,xx,yy; ans=0;
for(int i=1;i<=n;++i) fa[i][0]=i;
for(int i=1;i<=m&&tot<n;++i) {
xx=find(li[i].x);yy=find(li[i].y);
if(xx==yy) continue;
fa[xx][0]=yy; ans+=li[i].z;
li[i].usd=1; tot++;
add(li[i].x,li[i].y,li[i].z);
}
memset(fa,0,sizeof(fa));
} int d[maxn],f[maxn][12];
void dfs(int pos,int dep) {
d[pos]=dep;int y,z;
for(y=fir[pos];y;y=nxt[y]) {
if((z=to[y])==fa[pos][0]) continue;
f[z][0]=v[y]; fa[z][0]=pos;
dfs(z,dep+1);
}
} bool work(int x,int y,int z) {
if(d[x]!=d[y]) {
if(d[x]<d[y]) swap(x,y);
int cha=d[x]-d[y];
for(int i=10;i>=0&&cha;--i) if(cha>=mi[i]) {
if(f[x][i]==z) return 1;
cha-=mi[i];x=fa[x][i];
}
}
if(x==y) return 0;
for(int i=10;i>=0;--i) if(fa[x][i]!=fa[y][i]) {
if(f[x][i]==z||f[y][i]==z) return 1;
x=fa[x][i];y=fa[y][i];
}
if(f[x][1]==z||f[y][1]==z) return 1;
return 0;
} int main() {
T=read(); mi[0]=1; bool ok;
for(int i=1;i<=10;++i) mi[i]=mi[i-1]*2;
while(T--) {
n=read();m=read();ok=0;e=0;
memset(fir,0,sizeof(fir));
memset(f,0,sizeof(f));
for(int i=1;i<=m;++i) {
li[i].x=read();
li[i].y=read();
li[i].z=read();
li[i].usd=0;
}
sort(li+1,li+m+1,cmp);
Kr(); dfs(1,1);f[1][0]=1e9;
for(int i=1;i<=10;++i) for(int j=1;j<=n;++j) {
fa[j][i]=fa[fa[j][i-1]][i-1];
f[j][i]=max(f[j][i-1],f[fa[j][i-1]][i-1]);
}
for(int i=1;i<=m;++i) if(!li[i].usd&&work(li[i].x,li[i].y,li[i].z)) {
printf("Not Unique!\n");
ok=1; break;
}
if(!ok) printf("%d\n",ans);
}
return 0;
}

  

 
 

POJ 1679The Unique MST的更多相关文章

  1. POJ - 1679_The Unique MST

    The Unique MST Time Limit: 1000MS Memory Limit: 10000K Description Given a connected undirected grap ...

  2. poj 1679 The Unique MST

    题目连接 http://poj.org/problem?id=1679 The Unique MST Description Given a connected undirected graph, t ...

  3. POJ 1679 The Unique MST (最小生成树)

    The Unique MST Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 22668   Accepted: 8038 D ...

  4. poj 1679 The Unique MST(唯一的最小生成树)

    http://poj.org/problem?id=1679 The Unique MST Time Limit: 1000MS   Memory Limit: 10000K Total Submis ...

  5. poj 1679 The Unique MST 【次小生成树】【模板】

    题目:poj 1679 The Unique MST 题意:给你一颗树,让你求最小生成树和次小生成树值是否相等. 分析:这个题目关键在于求解次小生成树. 方法是,依次枚举不在最小生成树上的边,然后加入 ...

  6. poj 1679 The Unique MST (判定最小生成树是否唯一)

    题目链接:http://poj.org/problem?id=1679 The Unique MST Time Limit: 1000MS   Memory Limit: 10000K Total S ...

  7. POJ 1679 The Unique MST (最小生成树)

    The Unique MST 题目链接: http://acm.hust.edu.cn/vjudge/contest/124434#problem/J Description Given a conn ...

  8. poj 1679 The Unique MST【次小生成树】

    The Unique MST Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 24034   Accepted: 8535 D ...

  9. POJ 1679:The Unique MST(次小生成树&amp;&amp;Kruskal)

    The Unique MST Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 19941   Accepted: 6999 D ...

随机推荐

  1. Scrapy框架Crawler模板爬虫

    1.创建一个CrawlerSpider scrapy genspider -t crawl wx_spider 'wxapp-union.com' #导入规则 from scrapy.spiders ...

  2. Win10操作系统安装—U盘作为启动盘—系统安装到固态硬盘中

    利用U盘作为启动盘安装win10操作系统 1.U盘制作为启动盘,制作工具,我选择的是大白菜(个人觉得还是很好用的) 大白菜http://www.bigbaicai.com/rjjc/syjc/3269 ...

  3. BZOJ2982: combination Lucas模板

    2982: combination Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 734  Solved: 437[Submit][Status][Di ...

  4. https://vjudge.net/problem/2198221/origin

    https://vjudge.net/problem/2198221/origin逆向思维,原题是人出来,我们处理成人进去,算出来每个人的曼哈顿距离,然后从大到小排序,距离长的先入.走的距离+这个人从 ...

  5. 【python之路34】面向对象作业之学生选课系统

    一.需求: 1.可以注册管理员账号,管理员账号可以创建老师和课程 2.学生可以注册和登陆,学生可以从课程列表选课,可以进行上课登记查看 二.代码 1.文件目录 bin 存放可执行文件 config 存 ...

  6. TZ_09_MyBatis的pageHelper

    1.分页操作使用MyBatis的PageHelper 1>导入pageHelper的坐标 <dependency> <groupId>com.github.pagehel ...

  7. json字符串和对象的相互转换

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式. 同时,JSON是 JavaScript 原生格式,这 ...

  8. [转]js的键盘事件

    类型 键盘事件用来描述键盘行为,主要有keydown.keypress.keyup三个事件 keydown 当用户按下键盘上的任意键时触发,如果按住不放的话,会重复触发该事件 <div id=& ...

  9. springmvc 支持对象与json 自动转换的配置

    基于maven的工程, 需要在pom.xml中添加如下依赖 <dependency> <groupId>javax.servlet</groupId> <ar ...

  10. Twitter web information

    http://developer.51cto.com/art/201307/404612.htm 150M active users 300K Qps (read, only 6000 write/s ...