博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
NWU CCCC 1017(HDU 1272改编 并查集判断图是否存在环)
阅读量:6239 次
发布时间:2019-06-22

本文共 1692 字,大约阅读时间需要 5 分钟。

Evio与观察小白鼠

Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other)
Total Submission(s) : 13   Accepted Submission(s) : 3

Font: Times New Roman | Verdana | Georgia

Font Size: ← →

Problem Description

Evio非常喜欢生物,Evio现在想观察小白鼠的记忆能力。Evio想设计一个任意两个房间只有一条路径的地图。这个地图有m条双向通道,这条通道连接房间A和房间B,由于地图过于复杂,Evio想请你帮忙判断这个地图是否满足要求。

Input

每组数据第一行有一个正整数m(2<=n<=1000)。
接下来n行有两个正整数A B(1<=A,B<=10000),表示房间A和房间B之间有条双向通道。

Output

输出一行,表示地图是否满足要求,满足要求时输出”Yes”,否则输出”No”。

Sample Input

21 22 321 23 4

Sample Output

YesNo

思路:为了防止 (1,2)(3,4)这种情况,需要判断集合的个数,当且仅当只有一个集合的时候才满足题意。

#include 
#include
#include
using namespace std;int F[10005];int visit[10005];int get_far(int x){ return F[x] == x ? x : F[x] = get_far(F[x]);}void Union(int x,int y){ int a = get_far(F[x]),b = get_far(F[y]); if(a != b) F[a] = b;}int main(){ int n; while(cin>>n){ memset(visit,0,sizeof(visit)); for(int i = 0;i <= 20000;i ++) F[i] = i; int a,b; int flag = 0; int maxn=-1; int minn=99999999; for(int i = 1;i <= n;i ++){ scanf("%d%d",&a,&b); maxn = max(maxn,max(a,b)); minn = min(minn,min(a,b)); if(get_far(F[a]) != get_far(F[b])) Union(a,b); else flag = 1; visit[a] = visit[b] = 1; } int ans = 0; if(flag) cout<<"No"<
<= maxn;i ++){ int x = get_far(i); if(x == i && visit[i]) //得到了集合的个数 ans++; } if(ans == 1) cout<<"Yes"<

 

转载于:https://www.cnblogs.com/Jstyle-continue/p/6351944.html

你可能感兴趣的文章
Linux -- Ubuntu搭建java开发环境
查看>>
MVC视图中Html常见的辅助方法
查看>>
分享一下刚刚HP电话面试。。。。。。。。我估计我挂了,不过还是要来分享一下...
查看>>
PT 转 PX
查看>>
平凡世界里的万千思绪
查看>>
(二)java环境搭建
查看>>
深入推荐引擎相关算法 - 协同过滤2
查看>>
mybatis逆向工程之配置
查看>>
使用.NET 4.0+ 操作64位系统中的注册表
查看>>
剑指offer——面试题26:判断二叉树B是否为二叉树A的子结构
查看>>
scrapy主动退出爬虫的代码片段
查看>>
ny12 喷水装置(二)
查看>>
C\C++语言细节(2)
查看>>
Jenkins持续部署-自动生成版本号
查看>>
设计模式--代理模式
查看>>
javascript基础知识--最基础的
查看>>
[转] vue自定义组件(通过Vue.use()来使用)即install的使用
查看>>
[转] 函数声明和函数表达式——函数声明的声明提前
查看>>
敢死队2影评
查看>>
浅析 JavaScript 中的 apply 和 call 用法的差异
查看>>