zoukankan      html  css  js  c++  java
  • ACM 畅通工程

    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.

     题解:先会使用并查集,然后找出有多少个集合,再把总数减一就行了

     1 #include<stdio.h>
     2 #include<iostream>
     3 #include<algorithm>
     4 using namespace std;
     5 int parent[1005];
     6 struct node{  //定义一个结构体,方便数据收集 
     7     int a,b;  //a,b分别是;两个村庄的编号 
     8 }s[99999];
     9 
    10 void init()   //初始化parent数组
    11 {
    12     for(int i = 0; i < 1005; i++)
    13         parent[i] = i;
    14 }
    15 
    16 int find(int n)   //找根值 
    17 {
    18     if(parent[n] == n)
    19         return n;
    20     else
    21         return find(parent[n]);
    22 }
    23 
    24 
    25 void merge(int a,int b)
    26 {
    27     a = find(a);
    28     b = find(b);
    29     if(a != b)
    30         parent[b] = a;
    31 }
    32 /*
    33     n:城镇数目 
    34     m:道路数目 
    35 */
    36 int main()
    37 {
    38     int n,m;  
    39     while(cin>>n&&n!=0)
    40     {
    41         cin>>m;
    42         init();
    43         for(int i = 0; i < m; i++)
    44             cin>>s[i].a>>s[i].b;
    45         
    46         for(int i = 0; i < m; i++)
    47             merge(s[i].a,s[i].b);
    48         
    49         int ans = 0;
    50         
    51         for(int i = 1; i <= n; i++)
    52             if(parent[i] == i) ans++;
    53         
    54         cout<<ans-1<<endl;        
    55      } 
    56 
    57 return 0;
    58 }
  • 相关阅读:
    分布式事务的四种解决方案
    uber-go/guide 的中文翻译
    域名解析-CNAME
    Nginx节点存活状态检查
    Laravel核心解读--中间件(Middleware)
    Mac dyld: Library not loaded: /usr/local/opt/openssl/lib/libcrypto.1.0.0.dylib
    前缀树算法实现路由匹配原理解析
    原创-实用salt部署文档(持续更新)
    线上案例-调参-设置滑动窗口提高视频云播放性能
    NGINX日志割切
  • 原文地址:https://www.cnblogs.com/jj81/p/7305123.html
Copyright © 2011-2022 走看看