poj 1679 判断最小生成树是否唯一
/*
只需判断等效边和必选边的个数和n-1的关系即可
*/
#include<stdio.h>
#include<stdlib.h>
#define N 110
struct node {int u,v,w;
}f[N*N*2];
int cmp(const void *a,const void*b) {
return (*(struct node *)a).w-(*(struct node *)b).w;
}
int pre[N];
int find(int x) {if(x!=pre[x])pre[x]=find(pre[x]);return pre[x];
}
int main() {int t,n,m,i,j,sum,ff,total;scanf("%d",&t);while(t--) {scanf("%d%d",&n,&m);for(i=1;i<=n;i++)pre[i]=i;for(i=0;i<m;i++)scanf("%d%d%d",&f[i].u,&f[i].v,&f[i].w);qsort(f,m,sizeof(f[0]),cmp);j=0;sum=0;ff=0;total=0;for(i=0;i<m&&ff<n-1;) {j=i;while(f[i].w==f[j].w&&j<m) {int a=find(f[j].u);int b=find(f[j].v);if(a!=b)sum++;j++;}j=i;while(f[i].w==f[j].w&&j<m&&ff<n-1) {int a=find(f[j].u);int b=find(f[j].v);if(a!=b) {pre[a]=b;ff++;// printf("%d %d\n",f[j].u,f[j].v);total+=f[j].w;}j++;}i=j;}if(sum>n-1)printf("Not Unique!\n");elseprintf("%d\n",total);}
return 0;
}
转载于:https://www.cnblogs.com/thefirstfeeling/p/4410646.html
poj 1679 判断最小生成树是否唯一相关推荐
- 判断最小生成树是否唯一
题目链接 题目描述:给一个图,判断最小生成树是否唯一,n<=100 解题思路:题意简单明了,最小生成树模板都会敲,网上也没有什么特别好的方法,都是最简单暴力枚举,枚举的前提,有可以取代它的边. ...
- poj 1679 TheUniqueMST 最小生成树Kruskal(、Prim待做
题意: 给定连接的无向图,告诉它的最小生成树是否唯一. 定义1(生成树):考虑连通的无向图G =(V,E).G的生成树是G的子图,比如T =(V',E'),具有以下属性: 1.V'= V. 2.T是连 ...
- POJ 1679 判断最小树是否唯一
题意: 判断最小树是否唯一. 思路: 我用了两种方法,主要就是好久没敲了,找个水题练练手,第一种就是先一遍最小生成树,然后枚举最小生成树上的每一条边,然后取消这条边,在跑一遍最小生 ...
- PAT顶级 1016 Uniqueness of MST (35分)(判断最小生成树是否唯一)
添加链接描述 Given any weighted undirected graph, there exists at least one minimum spanning tree (MST) if ...
- 【POJ 1679 The Unique MST】最小生成树
无向连通图(无重边),判断最小生成树是否唯一,若唯一求边权和. 分析生成树的生成过程,只有一个圈内出现权值相同的边才会出现权值和相等但"异构"的生成树.(并不一定是最小生成树) 分 ...
- POJ 1679 解题报告
这道题是判断最小生成树是否唯一. 方法之一(也是显而易见正确的方法)是求次小生成树,然后看两者的值是否一样.一样则不唯一.ByVoid有对次小生成树(及次短路径)的讲解(https://www.byv ...
- poj 1679 The Unique MST
题目连接 http://poj.org/problem?id=1679 The Unique MST Description Given a connected undirected graph, t ...
- POJ - 1679 The Unique MST
题意: 给定一个有 n 个点的无向图,判断最小生成树是否唯一. 链接: https://vjudge.net/problem/POJ-1679 解题思路: 考虑在 Kruskal 算法基础上进行判断. ...
- POJ 1679 The Unique MST(次小生成树)
求次小生成树的两种方法. 第一种:Kruskal算法比较好操作.先求一遍最小生成树,然后再记录最小生成树上的边.然后再枚举删去最小生成树上的边,再求最小生成树,如果求出的最小生成树的花费等于第一次最小 ...
最新文章
- pip国内常用源及配置方式
- torch 特征对齐
- 基于 Zookeeper 的分布式锁实现
- 选择最好用的PyCharm IDE
- c语言蚂蚁搬,《蚂蚁搬豆》教案
- vba 将html转换excel,利用VBA将不同格式excel模板之间进行数据转换实例
- [转]数据库事务ACID特性
- vue watch 第一次不执行_Vue 实现前进刷新,后退不刷新的效果
- imread函数_MATLAB图像处理:27:使用imtranslate函数平移图像
- java的uuid有什么用_java – 什么是有效的UUID?
- jdk1.8之lambda表达式
- python tkinter库 pack布局方法调用
- python入门100例题-这 100 道 Python 题,拿去刷!!!
- 2018暑假第五周总结(8.6-8.12)
- 计蒜客 17119 Trig Function(切比雪夫多项式)
- Win10系统下配置virtualenv
- 入门激光雷达点云的3D目标检测
- 图片base64转存本地url
- 怎样用计算机截图,如何在电脑中截图
- 对100层楼两个玻璃球测试问题的理解
热门文章
- C++面试八股文快问快答の基础篇
- 从web.xml谈谈SpringMVC集成spring的初始化流程及SpringBoot集成SpringMVC
- @EnableDiscoveryClient
- Java网络编程之IP地址和InetAddress类
- Java的主要就业方向
- Securing the Deep Learning Stack
- linux内核启动后门,Linux下编写隐蔽的自启动回连后门
- html不换行溢出省略号代替,css控制不溢出,不换行,溢出部分省略号显示
- ICCV 2017 UCT:《UCT: Learning Unified Convolutional Networks forReal-time Visual Tracking》论文笔记
- 数论与数学专题练习(一)(201802~201805)