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

    畅通工程

    Time Limit : 4000/2000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other)
    Total Submission(s) : 4   Accepted Submission(s) : 2

    Font: Times New Roman | Verdana | Georgia

    Font Size:

    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
    
     
    并查集的应用,算出有多少个集合,减去一即为最小道路数
    另外注意优化

    #include<stdio.h>
    int father[1005],depth[1005];
    void init()
    {
        int i;
        for(i = 1; i < 1005;i ++)
        {
            father[i] = i;
            depth[i] = 0;
        }
    }

    int find(int x)
    {
        if(x==father[x])
            return x;
        else
            return father[x] = find(father[x]);   //优化树的高度;
    }

    void unit(int x,int y)
    {
        x = find(x);
        y = find(y);
        if(x==y)
            return ;
        if(depth[x]<depth[y])    //注意树的优化,防止高度过高而超时;
        {
            father[x] = father[y];

        }
        else
        {
            if(depth[x]>depth[y])
                father[y] = father[x];
            else
            {
                father[x] = father[y];
                depth[y]++;
            }
        }
    }

    int main()
    {
        int n,m,a,b,j,gr;
        while(~scanf("%d%d",&n,&m)&&n!=0)
        {
            gr = 0;
            init();
            while(m--)
            {
                scanf("%d%d",&a,&b);
                unit(a,b);
            }
            for(j = 1;j <= n;j ++)
            {
                if(j==father[j])
                    gr++;
            }
            printf("%d ",gr-1);
        }
        return 0;
    }

  • 相关阅读:
    perl 调短信接口
    MySQL处理千万级数据查询、分页
    tomcat 设置path 访问路径
    Tomcat 设置内存大小
    Tomcat 80端口启动 必须是root
    tomcat server.xml配置解析
    Perl 发送邮件
    单身北漂生活二、三事(上)——北漂18年(8)
    tomcat 应用访问
    Perl 采集监控日志插入数据库
  • 原文地址:https://www.cnblogs.com/anhuizhiye/p/3314052.html
Copyright © 2011-2022 走看看