zoukankan      html  css  js  c++  java
  • N

    题意,就是判断这点点是不是组成的一颗树,也就是判断是否有环,就是没看出来如果是森林怎么办,试一试吧,最可恶的还没有说有多少节点。。。。。就是个坑
    //////////////////////////////////////////////////////////////////
    坑,这题就是一个彻头彻尾的坑,首先数据不连接,需要一个标记数组来判断出现的都是那些节点,数组要开到10w,而且还有可能这棵树没有节点,是一个空树,也就是只有 0 0,还要判断是不是森林,要输出这也是一颗树.....确实很无聊的题目,需要让人试错

     #include <stdio.h>

    #include<algorithm>
    using namespace std;

    const int maxn = 100005;

    int f[maxn], use[maxn];

    void init()
    {
        for(int i=0; i<maxn; i++)
            f[i] = i, use[i] = 0;
    }
    int Find(int x)
    {
        if(f[x] != x)
            f[x] = Find(f[x]);
        return f[x];
    }

    int main()
    {
        int u, v, ok=1, t=1;

        init();
        while(scanf("%d%d", &u, &v), u!= -1 || v!=-1)
        {
            if(u+v == 0)
            {
                int sum = 0;

                for(int i=0; i<maxn; i++)
                {
                    if(use[i] == 1 && f[i] == i)
                        sum++;
                }

                if(ok && sum < 2)printf("Case %d is a tree. ", t++);
                else printf("Case %d is not a tree. ", t++);

                ok = 1;
                init();
            }
            else
            {
                use[u] = use[v] = 1;
                u = Find(u), v = Find(v);
                if(u != v)
                    f[u] = v;
                else ok = 0;
            }
        }

        return 0;
    }
  • 相关阅读:
    打印机无法打印文件
    .Net com组件操作excel(不建议采用Com组件操作excel)
    Zebra
    Map遍历方式
    PageHelper原理
    MySQL8.0新特性
    算法_插入排序
    贝叶斯定理
    二叉树学习笔记
    Java校验时间段重叠
  • 原文地址:https://www.cnblogs.com/liuxin13/p/4669887.html
Copyright © 2011-2022 走看看