zoukankan      html  css  js  c++  java
  • ural 1671 Anansi's Cobweb

    这道题是并差集的简单应用

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <algorithm>
     4 #define maxn 100010
     5 using namespace std;
     6 
     7 int x[maxn],y[maxn],flag[maxn],f[maxn],t[maxn];
     8 bool vis[maxn];
     9 
    10 inline int find(int x)
    11 {
    12     if(x==f[x]) return x;
    13     return f[x]=find(f[x]);
    14 }
    15 int main()
    16 {
    17     int n,m,q;
    18     scanf("%d%d",&n,&m);
    19     for(int i=1; i<=m; i++)
    20     {
    21         scanf("%d%d",&x[i],&y[i]);
    22     }
    23     scanf("%d",&q);
    24     memset(vis,false,sizeof(vis));
    25     for(int i=1; i<=q; i++)
    26     {
    27         scanf("%d",&flag[i]);
    28         vis[flag[i]]=true;
    29     }
    30     for(int i=1; i<=n; i++)
    31     f[i]=i;
    32     for(int i=1; i<=m; i++)
    33     {
    34         if(!vis[i])
    35         {
    36             int a=find(x[i]);
    37             int b=find(y[i]);
    38             if(a!=b)
    39             f[a]=b;
    40         }
    41     }
    42     int ans=0;
    43     for(int i=1; i<=n; i++)
    44     {
    45         if(f[i]==i) ans++;
    46     }
    47     for(int i=q; i>0; i--)
    48     {
    49         int a=find(x[flag[i]]);
    50         int b=find(y[flag[i]]);
    51         t[i]=ans;
    52         if(a!=b)
    53         {
    54             f[a]=b;
    55             ans--;
    56         }
    57     }
    58     for(int i=1; i<=q; i++)
    59     {
    60         if(i==q) printf("%d
    ",t[i]);
    61         else printf("%d ",t[i]);
    62     }
    63     return 0;
    64 }
    View Code
  • 相关阅读:
    Jenkins搭建
    Hexo搭建静态博客站点
    FactoryBean简介以及Mybatis-Spring应用
    ArrayList源码分析
    BCZM : 1.8
    BCZM : 1.7
    BCZM : 1.6
    BCZM : 1.5
    BCZM : 1.4
    BCZM : 1.3
  • 原文地址:https://www.cnblogs.com/fanminghui/p/3604230.html
Copyright © 2011-2022 走看看