• hdoj1272 小希的迷宫


    并查集
    = =、一开始判断连通,没有判断环,后来判断了环,没有判断连通。。。
    还有就是一开始是0 0,也是Yes,有道理么?我不是很懂。。

    #include <iostream>
    #include <stdio.h>
    #include <string.h>
    #include <stack>
    #include <queue>
    #include <map>
    #include <set>
    #include <vector>
    #include <math.h>
    #include <algorithm>
    using namespace std;
    #define LL long long
    const double pi = acos(-1.0);
    #define Len 200005
    #define mod 19999997
    const int INF = 0x3f3f3f3f;
    #define exp 1e-6
    
    #define N 100020
    
    int pre[N];
    bool vis[N];
    
    void init()
    {
        for(int i=1;i<=100000;i++)
            pre[i]=i;
        memset(vis,0,sizeof(vis));
    }
    int Find(int u)
    {
        int r=u;
        while(r!=pre[r])
        {
            r=pre[r];
        }
        int i=u,j;
        while(pre[i]!=r)
        {
            j=pre[i];
            pre[i]=r;
            i=j;
        }
        return r;
    }
    
    int main()
    {
        int a,b,aa,bb;
        while(1)
        {
            init();
            int flag=0;
            scanf("%d%d",&a,&b);
            if(a==-1&&b==-1)
                break;
            if(!a&&!b)
            {
                printf("Yes
    ");
                continue;    
            }
            vis[a]=vis[b]=1;
            aa=Find(a);
            bb=Find(b);
            if(aa!=bb)
                pre[aa]=bb;
            else
                flag=1;
    
            while(1)
            {
                scanf("%d%d",&a,&b);
                if(!a&&!b)
                    break;
                vis[a]=vis[b]=1;
                aa=Find(a);
                bb=Find(b);
                if(aa!=bb)
                    pre[aa]=bb;
                else
                    flag=1;
            }
            int cnt=0;
            for(int i=1;i<=100000;i++)
            {
                if(pre[i]==i&&vis[i])
                {
                    cnt++;
                }
            }
            if(!flag&&cnt==1)
                printf("Yes
    ");
            else
                printf("No
    ");
        }
        return 0;
    }
    
  • 相关阅读:
    神代码
    初读《代码大全》
    单词频度统计
    AFO
    bzoj4816: [Sdoi2017]数字表格
    bzoj4006: [JLOI2015]管道连接
    bzoj4774: 修路
    bzoj3209: 花神的数论题
    bzoj4521: [Cqoi2016]手机号码
    COGS2314. [HZOI 2015] Persistable Editor
  • 原文地址:https://www.cnblogs.com/keyboarder-zsq/p/5934494.html
Copyright © 2020-2023  润新知