zoukankan      html  css  js  c++  java
  • 1671. Anansi's Cobweb(并查集)

    1671

    并查集 对于询问删除边之后的连通块 可以倒着加边 最后再倒序输出

     1 #include <iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 #include<stdlib.h>
     6 using namespace std;
     7 #define N 100010
     8 int p[N],father[N],a,b,f[N];
     9 int pp[N];
    10 struct node
    11 {
    12     int x,y;
    13 }ed[N];
    14 int find(int x)
    15 {
    16     if(father[x]!=x)
    17     father[x] = find(father[x]);
    18     return father[x];
    19 }
    20 void add(int a,int b)
    21 {
    22     int x = find(a);
    23     int y = find(b);
    24     if(x!=y)
    25     father[x] = y;
    26 }
    27 int main()
    28 {
    29     int i,n,m,q;
    30     while(scanf("%d%d",&n,&m)!=EOF)
    31     {
    32         memset(f,0,sizeof(f));
    33         for(i =1; i <= n ; i++)
    34         father[i] = i;
    35         for(i = 1; i <= m ; i++)
    36         {
    37             scanf("%d%d",&ed[i].x,&ed[i].y);
    38         }
    39         scanf("%d",&q);
    40         for(i = 1; i <= q ;i++)
    41         {
    42             scanf("%d",&p[i]);
    43             f[p[i]] = 1;
    44         }
    45         for(i = 1; i <= m ; i++)
    46         {
    47             if(!f[i])
    48             add(ed[i].x,ed[i].y);
    49         }
    50         int num = 0;
    51         for(i = 1; i <= n ; i++)
    52         if(father[i]==i)
    53         num++;
    54         pp[1] = num;
    55         int o = 1;
    56         for(i = q ; i>1 ; i--)
    57         {
    58             int x = find(ed[p[i]].x);
    59             int y = find(ed[p[i]].y);
    60             if(x==y)
    61             {
    62                 pp[++o] = num;
    63                 continue;
    64             }
    65             else
    66             {
    67                 father[x] = y;
    68                 num--;
    69                 pp[++o] = num;
    70             }
    71         }
    72         for(i = o ; i > 1 ; i--)
    73         printf("%d ",pp[i]);
    74         printf("%d
    ",pp[1]);
    75     }
    76     return 0;
    77 }
    View Code
  • 相关阅读:
    python学习笔记3:基础(元组、字符串、列表、字典)
    python学习笔记2:基础(邮件发送)
    pycharm版本控制
    Pycharm版本控制之本地Git用法
    GitHub使用
    qtp简单说明
    查询Activity方便一点的方法
    appium基础框架
    loadrunner基本流程
    python下的unittest框架
  • 原文地址:https://www.cnblogs.com/shangyu/p/3337295.html
Copyright © 2011-2022 走看看