hdu 1272 小希的迷宫(并查集判断回路和是否连通)
2018-03-30 18:27
309 查看
题目:点击打开链接
思路:
用并查集,判断是否有回路和是否全部连通。
空树(0 0)输出yes。
判断回路:
等等,其实没必要一定让大的作为父结点,连在一起就行,判断如果有相同父节点,说明有回路。#include<bits/stdc++.h>
#define ll long long int
using namespace std;
const int N=100010;
int h
;
bool vis
;
int find(int x){
return h[x]==x?x:h[x]=find(h[x]);
}
void Union(int x,int y){
int a=find(x);
int b=find(y);
if(a==b)
return ;
h[a]=b;
}
int main(){
int m, n;
bool ok;
for(int i=1; i<=100000; i++) h[i] = i;
ok = true;
while(scanf("%d%d", &m, &n)&&m != -1 && n != -1) {
vis[m]=true; vis
=true;
int tmp;
if(m!=-1&&m!=0) tmp=m; //随便记录其中一个数。
if(m == 0 || n == 0) {
int temp=find(tmp),cnt=0;
for(int i=1;i<=100000;i++){
if(vis[i]&&find(i)!=temp)
cnt++;
}
if(cnt!=0) printf("No\n");
else printf(ok ? "Yes\n" : "No\n");
for(int i=1; i<=100000; i++) h[i] = i;
ok = true;
memset(vis,0,sizeof(vis));
} else {
if(find(m) == find(n)) ok = false;
else Union(m,n);
}
}
return 0;
}
思路:
用并查集,判断是否有回路和是否全部连通。
空树(0 0)输出yes。
判断回路:
等等,其实没必要一定让大的作为父结点,连在一起就行,判断如果有相同父节点,说明有回路。#include<bits/stdc++.h>
#define ll long long int
using namespace std;
const int N=100010;
int h
;
bool vis
;
int find(int x){
return h[x]==x?x:h[x]=find(h[x]);
}
void Union(int x,int y){
int a=find(x);
int b=find(y);
if(a==b)
return ;
h[a]=b;
}
int main(){
int m, n;
bool ok;
for(int i=1; i<=100000; i++) h[i] = i;
ok = true;
while(scanf("%d%d", &m, &n)&&m != -1 && n != -1) {
vis[m]=true; vis
=true;
int tmp;
if(m!=-1&&m!=0) tmp=m; //随便记录其中一个数。
if(m == 0 || n == 0) {
int temp=find(tmp),cnt=0;
for(int i=1;i<=100000;i++){
if(vis[i]&&find(i)!=temp)
cnt++;
}
if(cnt!=0) printf("No\n");
else printf(ok ? "Yes\n" : "No\n");
for(int i=1; i<=100000; i++) h[i] = i;
ok = true;
memset(vis,0,sizeof(vis));
} else {
if(find(m) == find(n)) ok = false;
else Union(m,n);
}
}
return 0;
}
相关文章推荐
- HDU 1272 小希的迷宫 (并查集判断回路、连通)
- HDU 1272 小希的迷宫 并查集判断回路和连通
- HDU 1272 小希的迷宫 并查集 (判断任意2个点是否有且仅有一条路径可以相通)
- HDU-1272 小希的迷宫 (并查集、判断图是否为树)
- HDU 1272 小希的迷宫 并查集 (判断任意2个点是否有且仅有一条路径可以相通)
- HDU 1272 小希的迷宫 并查集 (判断任意2个点是否有且仅有一条路径可以相通)
- HDU 1272 小希的迷宫 并查集 (判断任意2个点是否有且仅有一条路径可以相通)
- C语言:小希的迷宫 HDU - 1272 (并查集——检验是否有回路)
- hdu 1272 小希的迷宫 并查集->如何判断是否组成一串 即一棵树
- hdu 1272小希的迷宫(并查集判断无向图回路)
- HDU 1272 小希的迷宫(并查集,判断是否成环)
- HDU 1272 小希的迷宫 并查集 (判断任意2个点是否有且仅有一条路径可以相通)
- HDU-1272 小希的迷宫(并查集判断输入的数据是否能成为一颗树)
- HDU 1272 小希的迷宫 并查集 (判断任意2个点是否有且仅有一条路径可以相通)
- HDU 1272 小希的迷宫 并查集 (判断任意2个点是否有且仅有一条路径可以相通)
- HDU 1272 小希的迷宫(并查集:判断连通且结构为树)
- HDU 1272 小希的迷宫 并查集 (判断任意2个点是否有且仅有一条路径可以相通)
- POJ 1272 小希的迷宫【并查集+无向图判断是否有环 PS:和前一篇判断入度是否为1的很像】
- POJ 1272 小希的迷宫【并查集+无向图判断是否有环 PS:和前一篇判断入度是否为1的很像】
- 小希的迷宫(HDU 1272 并查集判断生成树)