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 ...
随机推荐
- Sql server 事务 存储过程
事务( Transaction )是并发控制的单位,是用户定义的一个操作序列.这些操作要么都做,要么都不做,是一个不可分割的工作单位. 通过事务,SQL Server能将逻辑相关的一组操作绑定在一起, ...
- Js 返回页面 or 跳转页面
跳出 iframe 在当前页跳转, window.parent.frames.location.href=www.baidu.com" 跳转页面 onclick="history. ...
- Ext JS学习第十五天 Ext基础之 Ext.DomQuery
此文同来记录学习笔记 •Ext.dom.Query 嗯,这个类一看就是到时做什么事儿的,不用我去过多的解释了.这个类一共提供了8个方法供开发人员去使用. •要说最常用的方法,无非就是Ext.query ...
- wpf全局异常
在App.xaml文件中 添加DispatcherUnhandledExceptionEventArgs 新增对应事件
- eclipse安装PyDev插件出错No software site found at jar:file:[离线包路径]!/. Do you wish to edit the location?
解决方法是直接将下载的离线包解压,得到plugins和features文件夹,放到Eclipse的dropins目录下.重启Eclipse,PyDev插件即可安装成功. 离线包下载地址:http:// ...
- Failed to fetch URL http://dl-ssl.google.com/android/repository/addons_list-2.xml, reason: Connectio (andriod sdk manager) http://dl-ssl.google.com/android上不去解决方案
Fetching https://dl-ssl.google.com/android/repository/addons_list-2.xml Fetched Add-ons List succes ...
- [LeetCode]题解(python):012-Integer to Roman
题目来源: https://leetcode.com/problems/integer-to-roman/ 题意分析: 这道题是要把在区间[1-3999]的数字转化成罗马数字. 题目思路: 只要知道了 ...
- 2013 南京邀请赛 K题 yet another end of the world
/** 大意:给定一组x[],y[],z[] 确定有没有两个不同的x[i], x[j] 看是否存在一个ID使得 y[i]<=ID%x[i]<=z[i] y[j]<=ID%x[j]&l ...
- NET Core 环境搭建和命令行CLI入门
NET Core 环境搭建和命令行CLI入门 2016年6月27日.NET Core & ASP.NET Core 1.0在Redhat峰会上正式发布,社区里涌现了很多文章,我也计划写个系列文 ...
- setuptools,easy_install使用
当需要安装第三方python包时,可能会用到easy_install命令.easy_install是由PEAK(Python Enterprise Application Kit)开发的setupto ...