zoukankan      html  css  js  c++  java
  • 统计节点个数

    Description
    给出一棵有向树,一共有N (1<N≤1000 )个节点,如果一个节点的度(入度+出度)不小于它所有儿子以及它父亲的度(如果存在父亲或儿子),那么我们称这个节点为p节点,现在你的任务是统计p节点的个数。
    InputFormat
    第一行为数据组数T (1≤T≤100 )。
    每组数据第一行为N 表示树的节点数。后面为N−1 行,每行两个数x ,y (0≤x,y<N ),代表y 是x 的儿子节点。
    OutputFormat
    每组数据输出一行,为一个整数,代表这棵树上p节点的个数。
    SampleInput
    2
    5
    0 1
    1 2
    2 3
    3 4
    3
    0 2
    0 1
    SampleOutput
    3
    1

    #include <iostream>
    using namespace std;
    struct node
    {
           int count;
           int child[1010];
           int father;
    }a[1010];
    int c[1010]={0};
    int d[1010]={-1};
    int main()
    {
       
        //freopen("in.txt","r",stdin);
        //freopen("out.txt","w",stdout);
        int t;
        cin>>t;
        for(int i=0;i<t;i++)
        {
                for(int s=0;s<1010;s++)
                {
                        for(int q=0;q<1010;q++)
                        {
                                a[s].child[q]=0;
                        }
                        c[s]=0;
                        a[s].father=0;
                        a[s].count=0;
                        d[s]=-1;
                }
                int n;
                cin>>n;
                for(int j=0;j<n-1;j++)
                {
                      int x,y;
                      cin>>x>>y;
                      a[x].count++;
                      a[y].count++;
                      a[y].father=x;
                      a[x].child[c[x]]=y; 
                      d[y]++; 
                      c[x]++;
                }
                int ans=0;
                for(int j=0;j<n;j++)
                {
                       int flag=1; 
                       if(d[j]==-1)
                        {
                             
                             for(int k=0;k<c[j];k++)
                             {
                                     if(a[j].count<a[a[j].child[k]].count)
                                     {
                                          flag=0;
                                          break;
                                     }
                             }   
                        }
                        else if(c[j]!=0)
                        {
                            for(int k=0;k<c[j];k++)
                             {
                                     if(a[j].count<a[a[j].child[k]].count)
                                     {
                                          flag=0;
                                          break;
                                     }
                             } 
                             if(a[j].count<a[a[j].father].count) 
                              {   flag=0;}
                        }
                        
                        else if(a[j].count<a[a[j].father].count)
                            {flag=0;}
                        if(flag==1)
                          ans++;
                }
                cout<<ans<<endl;
        }
       
        return 0;
    }
  • 相关阅读:
    POJ 1113 Wall
    POJ 3525 Most Distant Point from the Sea
    POJ 3335 Rotating Scoreboard
    POJ 1228 Grandpa's Estate
    POJ 1873 The Fortified Forest
    POJ 2354 Titanic
    POJ 3130 How I Mathematician Wonder What You Are!
    POJ 1106 Transmitters
    POJ 1474 Video Surveillance
    seajs 的研究一 无题
  • 原文地址:https://www.cnblogs.com/xym4869/p/8658164.html
Copyright © 2011-2022 走看看