zoukankan      html  css  js  c++  java
  • POJ1308 Is It A Tree?

    1. 并查集,有点忘了,看维基百科回顾起来了,三个操作,路径压缩、合并、查找父节点。代码很简单,具体参考http://zh.wikipedia.org/wiki/%E5%B9%B6%E6%9F%A5%E9%9B%86

    2. WA了好多次,最后发现是当空树的时候也是一棵树,fuck。。。

    #include <iostream>
    #include <fstream>
    #include <string>
    #include <algorithm>
    #include <cstring>
    #include <stack>
    #include <queue>
    #define maxn 1000
    using namespace std;
    int p[maxn], flag[maxn];
    int getfather(int x)
    {
        return p[x] == x ? x : p[x] = getfather(p[x]);
    }
    int main()
    {
        int t = 1, a, b;
        while (cin >> a >> b && a != -1)
        {
            if (!a)
            {
                cout << "Case " << t++ << " is a tree." << endl;
                continue;
            }
            int is = 1, tail = 0;
            for (int i = 1; i < maxn; ++i)
            {
                p[i] = i;
                flag[i] = 0;
            }
            while (a)
            {
                if (is)
                {
                    int ra = getfather(a), rb = getfather(b);
                    if (ra == rb)
                    {
                        is = 0;
                    }
                    else
                    {
                        p[rb] = ra;
                        flag[a] = flag[b] = 1;
                        tail = max(tail, max(a, b));
                    }
                }
                cin >> a >> b;
            }
            if (!is)
            {
                cout << "Case " << t++ << " is not a tree." << endl;
            }
            else
            {
                int roots = 0;
                for (int i = 1; i <= tail; i++)
                {
                    if (flag[i] && p[i] == i)
                    {
                        roots++;
                        if (roots > 1)
                            break;
                    }
                }
                if (roots == 1)
                    cout << "Case " << t++ << " is a tree." << endl;
                else
                    cout << "Case " << t++ << " is not a tree." << endl;
            }
    
        }
        return 0;
    }
    



  • 相关阅读:
    Windows 7 远程协助
    Windows 7 帮助和支持资源—第三方网站
    Windows 7 帮助和支持资源—第三方软件
    数据结构-队列
    数据结构-栈
    pycharm每日技巧-2
    数据结构-链表
    时间处理-1
    二维数组的排序
    《疯狂的简洁》书摘
  • 原文地址:https://www.cnblogs.com/dollarzhaole/p/3188905.html
Copyright © 2011-2022 走看看