zoukankan      html  css  js  c++  java
  • 畅通工程&&How Many Tables

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

     1 #include <iostream>
     2 #include <stdio.h>
     3 #include <string.h>
     4 #include <stdlib.h>
     5 using namespace std;
     6 int n,m;
     7 int bin[2005];
     8 int findx(int x)
     9 {
    10     int r=x;
    11     while(bin[r]!=r)
    12     {
    13         r=bin[r];
    14     }
    15     int k,j;
    16     k=x;
    17     while(k!=r)
    18     {
    19         j=bin[k];
    20         bin[k]=r;
    21         k=j;
    22     }
    23     return r;
    24 }
    25 void merge(int x,int y)
    26 {
    27     int fx=findx(x);
    28     int fy=findx(y);
    29     if(fx!=fy)
    30     bin[fx]=fy;
    31 }
    32 int main()
    33 {
    34     int x,y;
    35     while(scanf("%d",&n)!=EOF&&n!=0)
    36     {
    37         scanf("%d",&m);
    38         for(int i=1;i<=n;i++)
    39             bin[i]=i;
    40         while(m--)
    41         {
    42             scanf("%d%d",&x,&y);
    43             merge(x,y);
    44         }
    45         int l=0;
    46         for(int i=1;i<=n;i++)
    47         {
    48             if(findx(i)==i)
    49                 l++;
    50         }
    51 
    52         printf("%d
    ",l-1);
    53 
    54 
    55     }
    56     return 0;
    57 }

    不知道为么,这样就WA

    if(findx(x)!=findx(y))

    merge(x,y);

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

     1 #include <iostream>
     2 #include <stdio.h>
     3 #include <string.h>
     4 #include <stdlib.h>
     5 using namespace std;
     6 int n,m;
     7 int bin[2005];
     8 int findx(int x)
     9 {
    10     int r=x;
    11     while(bin[r]!=r)
    12     {
    13         r=bin[r];
    14     }
    15     int k,j;
    16     k=x;
    17     while(k!=r)
    18     {
    19         j=bin[k];
    20         bin[k]=r;
    21         k=j;
    22     }
    23     return r;
    24 }
    25 void merge(int x,int y)
    26 {
    27     int fx=findx(x);
    28     int fy=findx(y);
    29     if(fx!=fy)
    30     bin[fx]=fy;
    31 }
    32 int main()
    33 {
    34     int x,y;
    35     int T,K=0;
    36     scanf("%d",&T);
    37     while(T--)
    38     {
    39         K++;
    40         scanf("%d%d",&n,&m);
    
    41         for(int i=1;i<=n;i++)
    42             bin[i]=i;
    43         while(m--)
    44         {
    45             scanf("%d%d",&x,&y);
    46             merge(x,y);
    47         }
    48         printf("
    ");
    49         int l=0;
    50         for(int i=1;i<=n;i++)
    51         {
    52             if(findx(i)==i)
    53                 l++;
    54         }
    55         printf("%d
    ",l);
    56        
    57     }
    58     return 0;
    59 }
  • 相关阅读:
    数值微分(数学)(组合数)
    破冰派对(搜索)
    [NOIP2017]宝藏
    [NOIP2013]华容道
    收集邮票(数学期望)
    序列(DP)(组合数)
    luogu1357花园(矩阵运算)(状压DP)
    游戏(期望)
    [NOIP2012]疫情控制
    [NOIP2012] 开车旅行
  • 原文地址:https://www.cnblogs.com/zhangmingcheng/p/3815081.html
Copyright © 2011-2022 走看看