zoukankan      html  css  js  c++  java
  • HDU 4496 D-City —— (并查集的应用)

      给出n个点和m条边,一条一条地删除边,问每次删除以后有多少个联通块。

      分析:其实就是并查集的应用,只是前一阵子一直做图论思路一直囿于tarjan了。。方法就是,记录每一条边,然后从最后一条边开始不断的加边,如果用并查集来判断联通块有没有减少即可。

      代码如下:

     1 #include <stdio.h>
     2 #include <string.h>
     3 #include <algorithm>
     4 #include <set>
     5 using namespace std;
     6 typedef pair<int,int> pii;
     7 
     8 int root[10000+5],ans[10000+5];
     9 pii edges[100000+5];
    10 int findroot(int x) {return x==root[x]?x:root[x]=findroot(root[x]);}
    11 
    12 int main()
    13 {
    14     int n,m;
    15     while(scanf("%d%d",&n,&m)==2)
    16     {
    17         int sum = n;
    18         for(int i=0;i<n;i++) root[i]=i;
    19         for(int i=0;i<m;i++)
    20         {
    21             int u,v;
    22             scanf("%d%d",&u,&v);
    23             edges[i]=pii(u,v);
    24         }
    25 
    26         for(int i=m-1;i>=0;i--)
    27         {
    28             ans[i] = sum;
    29             int u = edges[i].first,v=edges[i].second;
    30             int x = findroot(u),y = findroot(v);
    31             if(x != y)
    32             {
    33                 root[x] = y;
    34                 sum --;
    35             }
    36         }
    37         for(int i=0;i<m;i++)
    38         {
    39             printf("%d
    ",ans[i]);
    40         }
    41     }
    42     return 0;
    43 }
  • 相关阅读:
    算法---大整数相加
    Openxml入门---Openxm读取Excel数据
    一个有用的网络监控软件
    C#基础---C#如何对Json字符串处理
    C#基础---IComparable用法,实现List<T>.sort()排序
    OpenXml入门---word里面插入图片
    OpenXml入门
    OpenXml入门----给Word文档添加表格
    拼图
    小锤子
  • 原文地址:https://www.cnblogs.com/zzyDS/p/5650423.html
Copyright © 2011-2022 走看看