poj1679(判断最小生成树是否唯一)
题意:给出n个点,m条边,要你判断最小生成树是否唯一。
思路:先做一次最小生成树操作,标记选择了的边,然后枚举已经被标记了的边,判断剩下的边组成的最小生成树是否与前面的相等,相等,则不唯一,否则唯一......
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct node
{
int v1,v2;
int dis;
int flg;
} s[10000]; int cmp(const node a,const node b)
{
if(a.dis<b.dis)
return 1;
else
return 0;
} int father[200],n; int kruskal(int num,int m)
{
int ans=0,cnt=1;
for(int i=0; i<m; i++)
{
if(i==num)
continue;
int s1=father[s[i].v1];
int s2=father[s[i].v2];
if(s1!=s2)
{
ans+=s[i].dis;
//s[i].flg=1;
cnt++;
father[s2]=s1;
for(int j=0; j<=n; j++)
if(father[j]==s2)
father[j]=s1;
}
}
if(cnt!=n) return -1;
else return ans;
}
int main()
{
int text;
scanf("%d",&text);
while(text--)
{
int m;
int ans=0;
scanf("%d%d",&n,&m);
for(int i=0; i<=n; i++)
father[i]=i;
for(int i=0; i<m; i++)
{
scanf("%d%d%d",&s[i].v1,&s[i].v2,&s[i].dis);
s[i].flg=0;
} sort(s,s+m,cmp);
int cnt=1;
for(int i=0; i<m; i++)
{
int s1=father[s[i].v1];
int s2=father[s[i].v2];
if(s1!=s2)
{
ans+=s[i].dis;
s[i].flg=1;
cnt++;
father[s2]=s1;
for(int j=0; j<=n; j++)
if(father[j]==s2)
father[j]=s1;
}
}
int w=0;
for(int i=0; i<m; i++)
{
if(s[i].flg==0)
continue;
int sum=0;
for(int j=0;j<=n;j++)
father[j]=j;
sum=kruskal(i,m);
//printf("sum==%d\n",sum);
if(sum==ans)
{
w=1;
break;
}
}
if(w==1)
printf("Not Unique!\n");
else
printf("%d\n",ans);
}
return 0;
}
poj1679(判断最小生成树是否唯一)的更多相关文章
- POJ-1679 The Unique MST(次小生成树、判断最小生成树是否唯一)
http://poj.org/problem?id=1679 Description Given a connected undirected graph, tell if its minimum s ...
- POJ 1679 The Unique MST(判断最小生成树是否唯一)
题目链接: http://poj.org/problem?id=1679 Description Given a connected undirected graph, tell if its min ...
- POJ 1679 The Unique MST (次小生成树 判断最小生成树是否唯一)
题目链接 Description Given a connected undirected graph, tell if its minimum spanning tree is unique. De ...
- POJ 1679 The Unique MST 【判断最小生成树是否唯一】
Description Given a connected undirected graph, tell if its minimum spanning tree is unique. Defini ...
- poj 1679 The Unique MST 判断最小生成树是否唯一(图论)
借用的是Kruskal的并查集,算法中的一点添加和改动. 通过判定其中有多少条可选的边,然后跟最小生成树所需边做比较,可选的边多于所选边,那么肯定方案不唯一. 如果不知道这个最小生成树的算法,还是先去 ...
- POJ1679判断最小生成树的唯一性
题意: 判断最小树是否唯一. 思路: 我用了两种方法,主要就是好久没敲了,找个水题练练手,第一种就是先一遍最小生成树,然后枚举最小生成树上的每一条边,然后取消这条边,在跑一遍最小生 ...
- poj 1679 判断最小生成树是否唯一
/* 只需判断等效边和必选边的个数和n-1的关系即可 */ #include<stdio.h> #include<stdlib.h> #define N 110 struct ...
- POJ-1679 The Unique MST---判断最小生成树是否唯一
题目链接: https://vjudge.net/problem/POJ-1679 题目大意: 给定一个无向连通网,判断最小生成树是否唯一. 思路: (1)对图中的每条边,扫描其他边,如果存在相同权值 ...
- poj1679(最小生成树)
传送门:The Unique MST 题意:判断最小生成树是否唯一. 分析:先求出原图的最小生成树,然后枚举删掉最小生成树的边,重做kruskal,看新的值和原值是否一样,一样的话最小生成树不唯一. ...
随机推荐
- 关于去哪儿网的UI自动化测试脚本
UI自动化测试Qunar机票搜索场景访问Qunar机票首页http://flight.qunar.com,选择“单程”,输入出发.到达城市,选择today+7日后的日期,点“搜索”,跳转到机票单程搜索 ...
- MySQL -- 全文检索(自然语言全文检索)
自然语言全文本检索缺省或者modifier被设置为in natural language mode,都是进行自然语言检索.对于表中的每一行,match()都会返回一个关联值. mysql> CR ...
- Android Studio:正确导入SO相关文件
导入so文件有2种方式 第一种: 使用jniLibs文件夹导入so文件,则仅需将所有cpu类型的文件夹拷进去. 在project结构下,module目录下创建libs文件夹,放入jar文件:在sr ...
- 【转】Braid - 一个发人深思的游戏
Braid - 一个发人深思的游戏 我已经很久很久没有打游戏了(如果不算 Angry Birds 之类用来打发时间的游戏的话).我的最后一个真正意义上的游戏机,是 PlayStation 1.在那上面 ...
- asp.net C#取Excel 合并单元格内容
asp教程.net c#取excel 合并单元格内容读取excel数据,填充dataset// 连接字符串 string xlspath = server.mappath("~/www.11 ...
- Source Insight中代码块注释
转载:http://blog.csdn.net/cindylx422/article/details/7560786 修改工程目录下的utils.em文件,将下面代码添加到末尾,然后将此文件添加到工程 ...
- Android应用的自动更新模块
软件的自动更新一般都与Splash界面绑定在一起, 由于需要维护的软件界面很复杂, 一个Activity中嵌入ViewPager, 并且逻辑比较复杂, 索性重新写一个Activity, 现在的软件都很 ...
- Android_Bitmap_图片的二次采样并生成缩略图
1.Bitmap概述 Android系统支持几种图片(.png (preferred), .jpg (acceptable), .gif (discouraged)), 其中Bitmap位图#ffff ...
- [转]八幅漫画理解使用JSON Web Token设计单点登录系统
上次在<JSON Web Token - 在Web应用间安全地传递信息>中我提到了JSON Web Token可以用来设计单点登录系统.我尝试用八幅漫画先让大家理解如何设计正常的用户认证系 ...
- 如何将 .net2.0注册到IIS ,重新注册IIS
打开程序-运行-cmd:输入一下命令重新注册IIS C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -i 一.运行C:\ ...