• 6.1.3 畅通工程


    畅通工程

    Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
    Total Submission(s): 104 Accepted Submission(s): 86

    Problem Description
    某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇。省政府“畅通工程”的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要互相间接通过道路可达即可)。问最少还需要建设多少条道路?
     

    Input
    测试输入包含若干测试用例。每个测试用例的第1行给出两个正整数,分别是城镇数目N ( < 1000 )和道路数目M;随后的M行对应M条道路,每行给出一对正整数,分别是该条道路直接连通的两个城镇的编号。为简单起见,城镇从1到N编号。
    注意:两个城市之间可以有多条道路相通,也就是说
    3 3
    1 2
    1 2
    2 1
    这种输入也是合法的
    当N为0时,输入结束,该用例不被处理。
     

    Output

                对每个测试用例,在1行里输出最少还需要建设的道路数目。
     

    Sample Input
    4 2
    1 3
    4 3
    3 3
    1 2
    1 3
    2 3
    5 2
    1 2
    3 5
    999 0
    0
     

    Sample Output
    1
    0
    2
    998
    Hint
    Hint
    Huge input, scanf is recommended.

    思路:并查集啊!!!居然WA了三次,原因是并查集的合并操作应该是合并祖先节点!我居然合并的是当前节点啊!!!!(水题一道啊!)

     1 #include <cstdio>
     2 #include <cstring>   
     3 #include <iostream>
     4 #include <cmath>
     5 #include <algorithm>
     6 #include <cstdlib>
     7 using namespace std;
     8 
     9 const int maxn=1100;
    10 int f[maxn];
    11 int x,y,n,m;
    12 
    13 void close()
    14 {
    15     exit(0);
    16 }
    17 
    18 int find(int k)
    19 {
    20     if (f[k]==k)
    21         return k;
    22     f[k]=find(f[k]);
    23     return f[k];
    24 }
    25 
    26 void init()
    27 {
    28     while (scanf("%d",&n)!=EOF)
    29      {
    30          if (n==0) break;
    31          scanf("%d",&m);
    32          for (int i=1;i<=n;i++)
    33              f[i]=i;
    34          for (int i=1;i<=m;i++)
    35          {
    36              scanf("%d %d",&x,&y);
    37              int t1=find(x);
    38              int t2=find(y);
    39              if (find(x)!=find(y))
    40                  f[t1]=t2;
    41          }
    42 int ans=0;
    43          for (int i=1;i<=n;i++)
    44 if (f[i]==i) ans++;
    45              printf("%d\n",ans-1);
    46      }
    47 }
    48 
    49 
    50 int main ()
    51 {
    52     init();
    53     close();
    54 }
  • 相关阅读:
    30分钟用Restful ABAP Programming模型开发一个支持增删改查的Fiori应用
    SAP Marketing Cloud功能简述(一) : Contacts和Profiles
    如何使用点击超链接的方式打开Android手机上的应用
    1036. Boys vs Girls (25)
    Yet another A + B
    1033. To Fill or Not to Fill (25)
    1032. Sharing (25)
    1021. Deepest Root (25)
    1017. Queueing at Bank (25)
    1016. Phone Bills (25)
  • 原文地址:https://www.cnblogs.com/cssystem/p/2987886.html
Copyright © 2020-2023  润新知