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,看新的值和原值是否一样,一样的话最小生成树不唯一. ...
随机推荐
- Win10企业版转专业版
原文地址:https://jingyan.baidu.com/article/86112f136624322737978797.html 转换ISO镜像下载地址: ed2k://|file|cn_wi ...
- 雷军:重刷ROM的“自我格式化”
本文来源于:百度百家 作者:金错刀 2014-03-14 10:33:06 最近,跟一个前金山高管聊起雷军,特别是雷军的变化,她的感觉是:雷总岂止是变化,简直是格式化,甚至是把自己重刷了一遍ROM. ...
- 控件View动态设置高度时会卡顿、速度慢的情况解决
今天碰到这种情况,一直想不通是什么问题,之前一直设置高度的时候也不卡为何今天就这么卡了.做了很多小示例一直是很慢,后来试着把View的上级节点RelativeLayout的替换成了LinearLayo ...
- 在C语言中除法运算为什么没有小数部分?
原文链接: http://wenda.tianya.cn/question/4e096f010317a93d 除法运算符" / ",如果是两个整数相除结果为整数如果需要保留小数时 ...
- Web用户控件开发--分页控件
分页是Web应用程序中最常用到的功能之一,在ASP.NET中,虽然自带了一些可以分页的数据控件,但其分页功能并不尽如人意.本文对于这些数据控件的假分页暂且不表,如有不明白的同学请百Google度之. ...
- H5 设备方向及运动API
传送门:https://blog.csdn.net/Panda_m/article/details/57515195 入门的demo: <!DOCTYPE html> <html l ...
- 《Deep Learning》(深度学习)中文版 开发下载
<Deep Learning>(深度学习)中文版开放下载 <Deep Learning>(深度学习)是一本皆在帮助学生和从业人员进入机器学习领域的教科书,以开源的形式免费在 ...
- 设置Myeclipse中的代码格式化、注释模板及保存时自动格式化
1:设置注释的模板: 下载此模板: codetemplates.xml 搜索Dangzhang,将其改为你自己的姓名,保存 打开eclipse/myeclipse选择 window-->Pre ...
- 如何在Windows环境下安装JDK
原文链接:http://android.eoe.cn/topic/android_sdk 1. JDK 的下载 JDK有好几个类型版本,我们只需要选择Java SE类型的版本就行了. 进入网页:htt ...
- android开发前奏曲之开发工具ADT
原文:http://android.eoe.cn/topic/android_sdk Android开发工具(ADT)插件为Eclipse提供了一个专业级的开发环境,用于构建Android应用程序.这 ...