zoukankan      html  css  js  c++  java
  • 这是一棵树吗

    step1:对输入的节点标记并进行合并操作。合并时两个节点不能有相同的根节点,否则会构成环。若b要接到a上,保证b是根节点,否则b将会有两个父节点。若无以上两种情况,可以合并两棵树。

    step2:每组数据输入结束后要计算根节点的总数,若根节点总数不为1,则构成的不是树。

    step3:根据以上判断输出结果,每组数据输出后要初始化数据。

    http://poj.org/problem?id=1308

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 #include<string.h>
     4 int f[1000000],flag[1000000];
     5 int find(int x)
     6 {
     7     if(f[x]!=x)
     8         f[x]=find(f[x]);
     9     return f[x];
    10 }
    11 int make(int a,int b)     //并操作错误返回1,正确返回0
    12 {
    13     int f1=find(a);
    14     int f2=find(b);
    15     if(f2!=b)             //保证b节点是根节点,否则有两个父节点 
    16         return 1;
    17     if(f1==f2)           //保证a,b不在同一棵树中,避免产生环
    18         return 1;
    19     else
    20         f[f2]=f1;       //合并
    21     return 0;
    22 }
    23 int main()
    24 {
    25     int a,b,m=0,t=0,i,p=1,key=0;
    26     for(i=1;i<=999999;i++)
    27         f[i]=i;
    28     memset(flag,0,sizeof(flag));
    29     while(1)
    30     {
    31         scanf("%d%d",&a,&b);
    32         if(a<=-1&&b<=-1)  break;
    33         if(a>m)  m=a;
    34         if(b>m)  m=b;
    35         if(a==0&&b==0)
    36         {
    37             for(i=1;i<=m;i++)       //计算树根的数量是否大于1
    38             {
    39                 if(flag[i]==1&&f[i]==i)
    40                     t++;
    41                 if(t>=2)  break;
    42             }
    43             if(key>0||t>=2)
    44                 printf("Case %d is not a tree.
    ",p++);
    45             else
    46                 printf("Case %d is a tree.
    ",p++);
    47             for(i=1;i<=999999;i++)
    48                 f[i]=i;
    49             m=0,t=0,key=0;
    50             memset(flag,0,sizeof(flag));
    51             continue;
    52         }
    53         flag[a]=1;flag[b]=1;
    54         key+=make(a,b);
    55     }
    56     return 0;
    57 }
  • 相关阅读:
    amazon海淘+CUL中美速递转运详细教程(免税)
    单页 Web 应用概述
    JavaScript JQuery SPA Frameworks
    win环境的apache下Virtualhost 设置
    Windows下创建.htaccess文件的N种方法
    ARP欺骗攻击与防护介绍
    静态构造函数(转载)
    SQL从表内容条件满足查询
    SQL数据库开发—精典
    如何学好C++语言(转载)
  • 原文地址:https://www.cnblogs.com/lyf123456/p/3573508.html
Copyright © 2011-2022 走看看