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 ...
随机推荐
- Android实现应用下载并自动安装apk包
安装: ? 1 2 3 4 5 String str = "/CanavaCancel.apk"; String fileName = Environment.getExterna ...
- HA for openstack
mysql ha instance ha openstack博客:http://blog.csdn.net/tantexian/article/list/2 使用eclipse远程调试openstac ...
- 阵列中条带(stripe)、stripe unit
摘抄:http://blog.sina.com.cn/s/blog_4a362d610100aed2.html 在磁盘阵列中,数据是以条带(stripe)的方式贯穿在磁盘阵列所有硬盘中的.这种数据的分 ...
- SSIS 阻塞,半阻塞和全阻塞 (Non-blocking, semi-blocking and Fully-blocking) transformations清单
三种Blocking类型,这里跟数据流的Buff关系很大:■■ non-blocking transformations,每一行直接转换输出,没有等待.■■ partial-blocking tran ...
- 使用jsonEditor打造一个复杂json编辑器
最近研究一个web版的json编辑器,在github中搜索,发现了这个利器. https://github.com/jdorn/json-editor 几经研究,终于把该控件的大部分功能研究透彻. 发 ...
- HDU 4548(美素数)
Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Description 小明对数的 ...
- URAL 1203 Scientific Conference dp?贪心
题目:click here 分明就是贪心怎么会在dp的专题 #include <bits/stdc++.h> using namespace std; typedef unsigned l ...
- packstack安装以及centos源配置注意事项
On CentOS:安装分为四步: 1,$ sudo yum install -y centos-release-openstack-mitaka 2,$ sudo yum update -y 3,$ ...
- Unqualified name lookup
Unqualified name lookup File scope Namespace scope For an qualified name, that is a name that does n ...
- 「OC」 多态
一.基本概念 多态在代码中的体现,即为某一类事物的多种形态,OC对象具有多态性.必须要有继承,没有继承就没有多态. 在使用多态时,会进行动态检测,以调用真实的对象方法. 多态在代码中的体现即父类指针指 ...