zoukankan      html  css  js  c++  java
  • HDU1272

    http://acm.split.hdu.edu.cn/showproblem.php?pid=1272

    对于这道题,只要找出形成的图是不是连通无环的图即可。即是判断输入的两个点是否来自同一个父亲结点。还要注意不要忘记这个图一定是互相连通的。另外注意当输入两个0的时候也是输出Yes

     1 #include<stdio.h>
     2 #include<algorithm>
     3 #include<iostream>
     4 #include<string.h>
     5 using namespace std;
     6 const int M=100015;
     7 int fa[M],vis[M];
     8 int fin(int x)
     9 {
    10     return fa[x]==x?fa[x]:fa[x]=fin(fa[x]);
    11 }
    12 int unin(int x,int y){
    13 return fa[fin(x)]=fin(y);
    14 }
    15 int main()
    16 {
    17     int a,b;
    18     while(~scanf("%d%d",&a,&b)){
    19         if(a==-1&&b==-1)break;
    20         if(a==0&&b==0){
    21           puts("Yes");
    22             continue;
    23         }
    24         int flag=1;
    25         for(int i=0;i<M;i++){
    26             fa[i]=i;
    27         }
    28         memset(vis,0,sizeof(vis));
    29         unin(a,b);
    30         vis[a]=vis[b]=1;
    31         while(~scanf("%d%d",&a,&b)){
    32             if(a==0&&b==0)break;
    33             if(fin(a)==fin(b))flag=0;
    34             else unin(a,b);
    35             vis[a]=vis[b]=1;
    36         }
    37         if(!flag)puts("No");
    38         else {for(int i=0;i<M;i++)
    39             if(vis[i]&&fa[i]==i)
    40                 flag++;
    41          if(flag==2)puts("Yes");
    42         else puts("No");
    43 
    44         }
    45     }
    46 return 0;
    47 }
    View Code

    对于输入输出数据多的代码,要用scanf和printf,此题用cin和cout就会超时。

    你若盛开,清风自来...
  • 相关阅读:
    17. 偏函数
    16. 装饰器
    vim详解
    linux用户管理sudo 磁盘分区
    linux用户管理
    linux文件与目录(四)
    linux特殊权限
    linux文件和目录(二)
    linux文件和目录
    配置网络
  • 原文地址:https://www.cnblogs.com/shangjindexiaoqingnian/p/5824878.html
Copyright © 2011-2022 走看看