zoukankan      html  css  js  c++  java
  • 树的判定

    判断输入的是不是一棵树

    输入

    The input will consist of a sequence of descriptions (test cases) followed by a pair of negative integers. Each test case will consist of a sequence of edge descriptions followed by a pair of zeroes Each edge description will consist of a pair of integers; the first integer identifies the node from which the edge begins, and the second integer identifies the node to which the edge is directed. Node numbers will always be greater than zero.

    The number of test cases will not more than 20,and the number of the node will not exceed 10000.
    The inputs will be ended by a pair of -1.样例输入:6 8  5 3  5 2  6 4 5 6  0 0

    8 1  7 3  6 2  8 9  7 5 7 4  7 8  7 6  0 0

    3 8  6 8  6 4 5 3  5 6  5 2  0 00 03 8 6 8 0 0
    -1 -1

    样例输出:

    Case 1 is a tree.
    Case 2 is a tree.
    Case 3 is not a tree.

    Case 4 is a tree.

    Case 5 is not a tree.

    代码如下:

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 using namespace std;
     5 const int N=10000+100;
     6 int in[N],vis[N];
     7 int p[N];
     8 int find(int x) {return x==p[x]? x: p[x]=find(p[x]);}
     9 int main()
    10 {
    11     int a,b,n=0,cs=1,i;
    12     bool istree=1;
    13     for(i=0;i<N;i++) p[i]=i;
    14     memset(vis,0,sizeof(vis));
    15     while(cin>>a>>b)
    16     {
    17         if(a==b&&a==-1) break;
    18         if(a!=0&&b!=0)
    19         {
    20             n=max(n,max(a,b));
    21             in[b]++;vis[a]=1;vis[b]=1;
    22             if(istree&&in[b]>1)
    23             {
    24                 istree=0;printf("Case %d is not a tree.\n",cs++);
    25             }
    26             if(istree)
    27             {
    28                 int x=find(a),y=find(b);
    29                 if(x!=y)
    30                 p[y]=x;
    31             }
    32         }
    33         else
    34         {
    35             if(istree)
    36             {
    37                 int t=0,s=0;
    38                 for(i=0;i<=n;i++)
    39                 {
    40                     if(vis[i]&&i==find(i)) t++;
    41                     if(t>1) break;
    42                     if(vis[i]&&in[i]==0) s++;
    43                     if(s>1) break;
    44                 }
    45                 if(i==n+1&&s==1)
    46                 printf("Case %d is a tree.\n",cs++);
    47                 else
    48                 printf("Case %d is not a tree.\n",cs++);
    49 
    50             }
    51             istree=1;
    52             for(i=0;i<n;i++) p[i]=i;
    53             memset(vis,0,sizeof(vis));
    54             memset(in,0,sizeof(in));
    55         }
    56     }
    57     return 0;
    58 }
  • 相关阅读:
    中文文本分类 pytorch实现
    常用各类数据集
    20 个大型中文文本数据集
    Transformers 简介(上)
    磐创AI|人工智能开发者中文文档大全-TensorFlow,PyTorch,Keras,skearn,fastai,OpenCV,聊天机器人,智能客服,推荐系统,知识图谱
    JointBert代码解读(五)
    模拟测试20190803
    模拟测试20190802
    模拟测试20190729
    模拟测试20190727
  • 原文地址:https://www.cnblogs.com/qijinbiao/p/2215448.html
Copyright © 2011-2022 走看看