zoukankan      html  css  js  c++  java
  • HDU1232——畅通工程【并查集】

    <题目链接>

    题目大意:

    利用并查集找出图中有几个不连通的城镇集合,所需修的道路数即为城镇集合-1。

    #include <stdio.h>
    int pre[1005];
    
    int find(int x)
    {
        int r = x;
        while (pre[r] != r)
            r = pre[r];
        int i = x; int j;
        while (pre[i] != r)          
        {
            j = pre[i];
            pre[i] = r;
            i = j;
        }
        return r;
    }
    
    void join(int a,int b)
    {
        int f1 = find(a);
        int f2 = find(b);
        if (f1 != f2)
        {
            pre[f2] = f1;
        }
    }
    int main()
    {
        int n, m, i, j,ans,a,b;
        while (scanf("%d%d", &n, &m) != EOF, n)
        {
            for (i = 1; i <= n; i++)pre[i] = i;
            for (i = 0; i < m; i++)
            {
                scanf("%d%d", &a, &b);
                join(a, b);
            }
            ans = 0;
            for (i = 1; i <= n; i++)
            {
                if (pre[i] == i)ans++;         //记录下这个图中有几个联通分支
            }
            printf("%d
    ", ans - 1);
        }//联通所需的道路就是联通分支数-1
        return 0;
    }

    2018-04-02


    作者:is_ok
    出处:http://www.cnblogs.com/00isok/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    Muddy Fields
    LightOJ 1321
    LightOJ 1085
    LightOJ 1278
    LightOJ 1341
    LightOJ 1340
    vijos 1426 背包+hash
    vijos 1071 01背包+输出路径
    vijos 1907 DP+滚动数组
    vijos 1037 背包+标记
  • 原文地址:https://www.cnblogs.com/00isok/p/8698490.html
Copyright © 2011-2022 走看看