判断两点:
1.任何2点的父节点不能相同->否则会导致2点间有多条通路
2.所有点只有1个集合

存在一个小坑,就是第一次输入 0 0 的时候,应该输出 Yes , 否则会WA

MY AC Code :

 #include<stdio.h>
#define NUM 100001
int root[NUM], visit[NUM], lu[NUM];
void init(){
for(int i=; i<=NUM; i++){
root[i]=i;
visit[i]=;
lu[i]=;
}
}
int find(int x){
while(root[x]!=x)
x=root[x];
return x;
}
void merge(int a, int b){
int x=find(a);
int y=find(b);
root[x]=y;
}
int main(){
int a,b,i,flag,count;
init();
flag = ;//judge
count = ;//numcase
while(EOF != scanf("%d%d",&a,&b)){
if(a < || b < ) break;
if(visit[a] == ){
visit[a] = ;
}
if(visit[b] == ){
visit[b] = ;
}
lu[b]++;
//如果是相同的根,会形成环
if(find(a) == find(b) && a != && b != && a != b) flag=;
else merge(a,b);
if(a== && b==){
count++;
int cnt=;
for(i=; i<NUM; i++){
if(visit[i] == && root[i] == i)
cnt++;
if(cnt > || lu[i] > ) //判断是否有2个以上的根 && 不能有入度大于1的点
flag = ;
}
if(!flag)
printf("No\n");
else printf("Yes\n");
init();
flag=;
}
}
return ;
}

Former Code:

#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
int root[];
int rank[];
int find(int x){
return root[x] == x ? x : (root[x] = find(root[x]));
}
void Union(int x, int y){
x = find(x);
y = find(y);
if(x == y) // x,y在同一个集合
return;
if(rank[x] > rank[y])
root[y] = x;
else if(rank[x] < rank[y])
root[x] = y;
else{
rank[y]++;
root[x] = y;
}
}
int main(){
int n,m,t,x,y;
int a,b,i;
while(scanf("%d%d",&a,&b) , a+ || b+){
if(a == && b ==){
printf("Yes\n");
continue;
}
for(i=; i<=; i++){
root[i] = i;
rank[i] =;
}
int flag =;//flag表示是否有多条路
rank[a]++;
rank[b]++;
Union(a, b);
while(scanf("%d%d",&a,&b) , a || b){
rank[a]++;
rank[b]++;
if(find(a) == find(b)) flag =;
Union(a,b);
}
int cnt =;//cnt表示生成?个联通图
for(int i=; i<=; ++i)
if(rank[i] && find(i) == i)//
cnt++;
//printf("flag = %d cnt = %d\n",flag,cnt);
if(flag && cnt ==)
printf("Yes\n");
else
printf("No\n");
}
return;
}

小希的迷宫

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 23313    Accepted Submission(s): 7157
Problem Description

上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走。但是她设计迷宫的思路不一样,首先她认为所有的通道都应该是双向连通的,就是说如果有一个通道连通了房间A和B,那么既可以通过它从房间A走到房间B,也可以通过它从房间B走到房间A,为了提高难度,小希希望任意两个房间有且仅有一条路径可以相通(除非走了回头路)。小希现在把她的设计图给你,让你帮忙判断她的设计图是否符合她的设计思路。比如下面的例子,前两个是符合条件的,但是最后一个却有两种方法从5到达8。 

 


Input

输入包含多组数据,每组数据是一个以0 0结尾的整数对列表,表示了一条通道连接的两个房间的编号。房间的编号至少为1,且不超过100000。每两组数据之间有一个空行。 
整个文件以两个-1结尾。

 


Output

对于输入的每一组数据,输出仅包括一行。如果该迷宫符合小希的思路,那么输出"Yes",否则输出"No"。

 


Sample Input

6 8 5 3 5 2 6 4 5 6 0 0 8 1 7 3 6 2 8 9 7 5 7 4 7 8 7 6 0 0 3 8 6 8 6 4 5 3 5 6 5 2 0 0 -1 -1

 


Sample Output

Yes Yes No
 

HDOJ 1272 并查集 不相同父节点的更多相关文章

  1. HDOJ 1272 并查集

    小希的迷宫 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...

  2. HDOJ 3635 并查集- 路径压缩,带秩合并

    思路来源:http://blog.csdn.net/niushuai666/article/details/6990421 题目大意: 初始时,有n个龙珠,编号从1到n,分别对应的放在编号从1到n的城 ...

  3. HDOJ 2120 并查集

    并查集的应用,用来查找被分割的区域个数. 即当两个节点值相同时说明已经为了一个圈,否则不可能,此时区域个数加1. #include<iostream> #include<cstdio ...

  4. HDU-6109 数据分割 并查集(维护根节点)

    题目链接:https://cn.vjudge.net/problem/HDU-6109 题意 给出多组等式不等式 对于每一个式子,首先判断是否不可能 如果不可能,记录本组正确式子的个数,然后进入下一组 ...

  5. POJ 1308&&HDU 1272 并查集判断图

      HDU 1272 I - 小希的迷宫 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64 ...

  6. 小希的迷宫(HDU 1272 并查集判断生成树)

    小希的迷宫 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  7. HDOJ 1325 并查集

    跟小希的迷宫基本一样,只是此题是有向图,要注意:1无环 2 只有一个入度为0的结点(根结点), 不存在入度大于1的结点.输入结束条件是两个负数,而不是-1,不然会TLE. #include<st ...

  8. 小希的迷宫 HDU - 1272 (并查集)

    思路: 当图中的集合(连通子图)个数为1并且边数等于顶点数-1(即改图恰好为一棵生成树)时,输出Yes. 此题的坑:(1) 如果只输入0 0算作一组数据的话答案应该输出Yes (2) 输入数据可能并不 ...

  9. 树上战争(HDU 2545 并查集求解点到根节点长度)

    树上战争 Time Limit: 10000/4000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

随机推荐

  1. Andorid Binder进程间通信---Binder本地对象,实体对象,引用对象,代理对象的引用计数

    本文參考<Android系统源码情景分析>,作者罗升阳. 一.Binder库(libbinder)代码: ~/Android/frameworks/base/libs/binder --- ...

  2. Java多线程之synchronized(三)

    在多线程访问同一个对象中的不同的synchronized方法或synchronized代码块的前提下,也就是“对象监控器”为同一个对象的时候,也就是synchronized的锁为同一把锁的时候,调用的 ...

  3. Mybatis 逆向工程

    Mybatis逆向工程: 推荐用Java和XML Configuration的方式生成逆向文件 Java类: package generation; import java.io.File; impo ...

  4. Object lifetime

    Object lifetime Temporary object lifetime Storage reuse Access outside of lifetime Every object has ...

  5. js中判断按键的方法

    // 通过证件号码查询人员基本信息,响应回车事件的js函数, $('#sfwwsss [name="AAC002"]').keydown(function(event) { var ...

  6. (C)高级排序法

    1.快速排序法 //方法1 从大到小 #include <iostream.h> void run(int* pData,int left,int right) { int i,j; in ...

  7. Android 网络交互之MD5为什么要加盐

    MD5为什么要加盐 之前面试的时候,遇到一个面试的哥哥.不停的跟我确认我对网络传输过程中的password进行MD5加密的时候,是否加key了. 当时我很纳闷,因为MD5本身已经是不可逆的了,需要破解 ...

  8. [WPF疑难] 继承自定义窗口

    原文 [WPF疑难] 继承自定义窗口 [WPF疑难] 继承自定义窗口 周银辉 项目中有不少的弹出窗口,按照美工的设计其外边框(包括最大化,最小化,关闭等按钮)自然不同于Window自身的,但每个弹出框 ...

  9. [WPF疑难]Hide me! not close

    原文 [WPF疑难]Hide me! not close [WPF疑难]Hide me! not close                               周银辉 有朋友遇到这样的一个问 ...

  10. 2014ACM/ICPC亚洲区鞍山赛区现场赛1009Osu!

    鞍山的签到题,求两点之间的距离除以时间的最大值.直接暴力过的. A - Osu! Time Limit:1000MS     Memory Limit:262144KB     64bit IO Fo ...