hdu 1272 小希的迷宫

https://vjudge.net/problem/HDU-1272

思路:
被这题卡了半天,妈的智障。
首先,还是没有仔细审题的问题,这题抽象出来就是判断一个图是否为无环的只有一个连通分量的图。直接用并查集做就好了。谨记审题仔细。

  1 #include <stdio.h>
  2 #include <string.h>
  3 
  4 int par[200005];
  5 int ran[200005];
  6 bool v[100005];
  7 
  8 void init(void)
  9 {
 10     for (int i = 0;i < 200005;i++)
 11         par[i] = i;
 12 }
 13 
 14 int fin(int x)
 15 {
 16     if (x == par[x])
 17         return x;
 18     else
 19         return par[x] = fin(par[x]);
 20 }
 21 
 22 bool unit(int x,int y)
 23 {
 24     x = fin(x);
 25     y = fin(y);
 26 
 27     if (x == y) return 0;
 28 
 29     if (ran[x] < ran[y])
 30     {
 31         par[x] = y;
 32     }
 33     else
 34     {
 35         par[y] = x;
 36 
 37         if (ran[x] == ran[y]) ran[x]++;
 38     }
 39 
 40     return 1;
 41 }
 42 
 43 int main()
 44 {
 45    while (1)
 46    {
 47        memset(par,0,sizeof(par));
 48        memset(ran,0,sizeof(ran));
 49         memset(v,0,sizeof(v));
 50 
 51        bool f = 0,fa = 0;
 52 
 53        int ma = 0;
 54 
 55        init();
 56 
 57        int a,b;
 58 
 59        while (scanf("%d%d",&a,&b) == 2)
 60        {
 61            if (a == -1 && b == -1)
 62            {
 63                f = 1;
 64                break;
 65            }
 66 
 67             if (a * b == 0) break;
 68 
 69             v[a] = 1;v[b] = 1;
 70 
 71             if (b > ma) ma = b;
 72             if (a > ma) ma = a;
 73 
 74            if (!unit(a,b))
 75            {
 76                fa = 1;
 77            }
 78 
 79        }
 80 
 81        if (f) break;
 82 
 83        if (fa)
 84        {
 85            printf("No
");
 86        }
 87        else
 88        {
 89            int rt = fin(ma);
 90 
 91            bool ff = 0;
 92 
 93            for (int i = 1;i <= ma;i++)
 94             if (v[i] && fin(i) != rt) ff = 1;
 95 
 96             if (ff) printf("No
");
 97             else printf("Yes
");
 98        }
 99 
100    }
101 
102     return 0;
103 }
犹豫就会败北!
原文地址:https://www.cnblogs.com/kickit/p/7147007.html