HDOJ 1272 并查集 不相同父节点
判断两点:
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

整个文件以两个-1结尾。
HDOJ 1272 并查集 不相同父节点的更多相关文章
- HDOJ 1272 并查集
小希的迷宫 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Subm ...
- HDOJ 3635 并查集- 路径压缩,带秩合并
思路来源:http://blog.csdn.net/niushuai666/article/details/6990421 题目大意: 初始时,有n个龙珠,编号从1到n,分别对应的放在编号从1到n的城 ...
- HDOJ 2120 并查集
并查集的应用,用来查找被分割的区域个数. 即当两个节点值相同时说明已经为了一个圈,否则不可能,此时区域个数加1. #include<iostream> #include<cstdio ...
- HDU-6109 数据分割 并查集(维护根节点)
题目链接:https://cn.vjudge.net/problem/HDU-6109 题意 给出多组等式不等式 对于每一个式子,首先判断是否不可能 如果不可能,记录本组正确式子的个数,然后进入下一组 ...
- POJ 1308&&HDU 1272 并查集判断图
HDU 1272 I - 小希的迷宫 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64 ...
- 小希的迷宫(HDU 1272 并查集判断生成树)
小希的迷宫 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- HDOJ 1325 并查集
跟小希的迷宫基本一样,只是此题是有向图,要注意:1无环 2 只有一个入度为0的结点(根结点), 不存在入度大于1的结点.输入结束条件是两个负数,而不是-1,不然会TLE. #include<st ...
- 小希的迷宫 HDU - 1272 (并查集)
思路: 当图中的集合(连通子图)个数为1并且边数等于顶点数-1(即改图恰好为一棵生成树)时,输出Yes. 此题的坑:(1) 如果只输入0 0算作一组数据的话答案应该输出Yes (2) 输入数据可能并不 ...
- 树上战争(HDU 2545 并查集求解点到根节点长度)
树上战争 Time Limit: 10000/4000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
随机推荐
- Objective-c 类实现 (@implementation)
在用@interface声明类之后,可以使用@implementation进行实类的实现.类的实现的具体语法如下: @implementation 类名 方法实现代码; @end; 实例: @impl ...
- 新技能get: 使用whois查询不明网址的信息
1.站长之家-->Whois反查 http://whois.chinaz.com/ 进入whois.chinaz.com,输入要查询的网址,选择查询即可.
- opencv第一站:配置opencv环境(2015-12-12)
今天论坛申请的书< OpenCV 计算机视觉编程攻略(中国工信出版社)>到了,准备研究研究机器视觉. 晚上安装了 vc2008 及 opencv 最新版 3.0.0,试了各种配置都是错误提 ...
- CSS3-旋转齿轮
CSS3-旋转齿轮 查看DEMO 通过 CSS3,我们能够创建动画,这可以在许多网页中取代动画图片.Flash 动画以及 JavaScript. 先来认识一下css3的animation animat ...
- Python之路Day14
主要内容:jQuery进阶.CSS伪类和伪元素.jQuery插件 tab菜单样式 checkbox全选.反选 位置:scrollTop和offset 事件:两种绑定事件的方式和委托delegate a ...
- java-StringTokenizer类
StringTokenizer类别可以通过某个字符或者多个字符作为分界符,来将字符串划分为多个标记(token). package com.example.helloworld; import jav ...
- css基本框架
- 细说UI线程和Windows消息队列(经典)
在Windows应用程序中,窗体是由一种称为“UI线程(User Interface Thread)”的特殊类型的线程创建的. 首先,UI线程是一种“线程”,所以它具有一个线程应该具有的所有特征,比如 ...
- MySQL server has gone away 解决方法
应用程序(比如PHP)长时间的执行批量的MYSQL语句.执行一个SQL,但SQL语句过大或者语句中含有BLOB或者longblob字段.比如,图片数据的处理.都容易引起MySQL server has ...
- H面试程序(16): 简单选择排序
#include<stdio.h> #include<assert.h> void display(int * a, int n) { assert(a); for(int i ...