hdu1272 小希的迷宫

题意:就是不存在环,而且各点相互连通

分析:就是一颗树,树的条件,连通,不含圈,边恰好为n-1个,只要满足其中两个条件就可以了,这道题统计节点个数,可以用set,map统计,用并查集

判断是否存在圈,只要注意空树也是正确答案就行了

代码:

2016/2/8

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+5;

int p[maxn],v[maxn];

void init(){
    memset(v,0,sizeof(v));
    for(int i=0;i<maxn;i++)
        p[i]=i;
}

int find(int x){
    return p[x]==x?x:p[x]=find(p[x]);
}

int main(){
    int d=0,maxid=0,x,y;
    bool ok=1;
    init();
    while(~scanf("%d%d",&x,&y)){
        if(x==0&&y==0){
            if((ok&&d==maxid-1)||d==0)
                puts("Yes");
            else
                puts("No");
            maxid=d=0;init();ok=1;continue;
        }
        if(x==-1&&y==-1)
            return 0;
        d++;
        if(!ok)
            continue;
        if(!v[x]){
            maxid++;
            v[x]=1;
        }
        if(!v[y]){
            maxid++;
            v[y]=1;
        }
        int nx=find(x);
        int ny=find(y);
        if(nx!=ny)
            p[nx]=p[ny];
        else
            ok=0;
    }
}

时间: 2024-12-21 01:08:45

hdu1272 小希的迷宫的相关文章

HDU1272 小希的迷宫 (并查集)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1272 注意问题: 1.不能成环,即每次输入的两个数的根节点不能相同: 2.只有一个迷宫,即根节点数目唯一: 3.注意当只输入"0 0" 时要输出"Yes": 4.状态压缩用递归回栈溢出. 参考代码: #include<stdio.h> int fa[100001]; int find(int u) { int s; s=u; while (fa[u]!=u)

HDU1272 小希的迷宫(基础并查集)

杭电的图论题目列表,共计500题,努力刷吧 AC 64ms #include <iostream> #include <cstdlib> #include <cstdio> #include <cstring> #include <algorithm> const int INF = 1e8; using namespace std; int father[100010]; bool vis[100010]; int findx(int r) {

HDU1272 - 小希的迷宫 并查集检测无向图的环

HDU1272 - 小希的迷宫:http://acm.hdu.edu.cn/showproblem.php?pid=1272 本题需判断是否有环存在和是否每个点都能到达图中任何一点.若满足后者,则顶点总数等于边的数目加一,前者也很容易判断,见代码. 代码: #include <iostream> #include <cstdio> #include <cstring> using namespace std; const int MAXN = 100011; int v

HDU--1272 小希的迷宫

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

HDU-1272 小希的迷宫 (并查集、判断图是否为树)

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

hdu1272小希的迷宫(并查集判断回路和是否连通)

传送门 迷宫中不能有回路,还要连通 如果最后集合数是一个那就是连通,否则不联通 要合并的两个顶点在相同集合内,表示出现了回路 输入时注意一下 1 #include<bits/stdc++.h> 2 using namespace std; 3 int f[100005]; 4 int getf(int v) 5 { 6 if(f[v]==v)return v; 7 else 8 { 9 f[v]=getf(f[v]); 10 return f[v]; 11 } 12 } 13 void mer

hdu1272 小希的迷宫 基础并查集

1 #include <iostream> 2 #include <cstdlib> 3 #include <cstdio> 4 #include <algorithm> 5 using namespace std; 6 7 const int M = 100005; 8 int a, b; 9 int father[M]; //记录父节点 10 bool circle; //判断是否存在环 11 bool visit[M]; //用来记录顶点数 12 in

ACM-并查集之小希的迷宫——hdu1272

***************************************转载请注明出处:http://blog.csdn.net/lttree*************************************** 小希的迷宫 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 24446    Accepted Submiss

小希的迷宫--hdu1272(并查集)

小希的迷宫 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 34553    Accepted Submission(s): 10578 Problem Description 上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走.但是她设计迷宫的思路不一样,首先她认为所有的通道都应该是