zoukankan      html  css  js  c++  java
  • hdu4496并查集的删边操作

    题意:
          给你一个图,问你删除一些边后还有几个连通快..


    思路:

          典型的并查集删边操作,并查集的删边就是先把不删除的边并查集一边(本题没有不删除的边),然后逆序吧所有要删除的边以点点加到并查集数组里,如果当前的边的两个点不是一个集合的,那么删除当前边后就会使连通快加一...


    #include<stdio.h>
    #include<string.h>
    
    #define N 11000
    
    typedef struct
    {
       int a ,b ,c;
    }EDGE;
    
    int mer[N];
    EDGE E[N*10];
    
    int finds(int x)
    {
       return x == mer[x] ? x : mer[x] = finds(mer[x]);
    }
    
    int main ()
    {
       int n ,m ,a ,b ,i;
       while(~scanf("%d %d" ,&n ,&m))
       {
          for(i = 1 ;i <= n ;i ++)
          mer[i] = i;
          for(i = 1 ;i <= m ;i ++)
          {
             scanf("%d %d" ,&a ,&b);
             E[i].a = a + 1;
             E[i].b = b + 1;
          }
          int sum = n;
          for(i = m;i >= 1;i --)
          {
             a = finds(E[i].a);
             b = finds(E[i].b);
             E[i].c = sum;
             if(a != b) sum --;
             mer[a] = b;
          } 
          for(i = 1 ;i <= m ;i ++)
          printf("%d
    " ,E[i].c);   
       }
       return 0;
    }
             
    

  • 相关阅读:
    nginx 负载均衡
    nginX 安装 启动
    nginx 简介
    使用ASDM 管理 ciscoASA设备
    OSPF配置实验(一)
    VRRP
    HSRP 详解
    Rip 动态路由协议
    配置ASA防火墙 远程管理方式
    Oracle 重启监听
  • 原文地址:https://www.cnblogs.com/csnd/p/12063231.html
Copyright © 2011-2022 走看看