zoukankan      html  css  js  c++  java
  • BZOJ 4579: [Usaco2016 Open]Closing the Farm

    Description

    依次删去一个点和它的边,问当前图是否连通.

    Sol

    并查集.

    倒着做就可以了.

    每次将一个点及其的边加入,如果当前集合个数大于 1,那么就不连通.

    Code

    /**************************************************************
        Problem: 4579
        User: BeiYu
        Language: C++
        Result: Accepted
        Time:2196 ms
        Memory:10328 kb
    ****************************************************************/
     
    #include <cstdio>
    #include <vector>
    #include <iostream>
    using namespace std;
     
    const int N = 200050;
     
    int n,m,cs;
    int b[N],p[N],f[N],ans[N];
    vector< int > g[N];
     
    inline int in(int x=0){ scanf("%d",&x);return x; }
    int find(int x){ return f[x] == x ? x : f[x]=find(f[x]); }
    int main(){
        n=in(),m=in();
        for(int i=1,u,v;i<=m;i++){
            u=in(),v=in();
            g[u].push_back(v),g[v].push_back(u);
        }
        for(int i=1;i<=n;i++) p[i]=in();
        for(int i=1;i<=n;i++) f[i]=i;
         
        for(int x=n,u,v;x;--x){
            cs++;
            u=p[x],b[u]=1;
            for(int i=0,lim=g[u].size();i<lim;i++){
                v=g[u][i];
                if(b[v]) if(find(u) != find(v)) f[find(u)]=find(v),cs--;
            }
            if(cs > 1) ans[x]=0;else ans[x]=1;
        }
        for(int i=1;i<=n;i++) if(ans[i]) puts("YES");else puts("NO");
        return 0;
    }
    

      

  • 相关阅读:
    CF528D Fuzzy Search
    P3489 付公主的背包
    有标号的DAG计数
    P4609 [FJOI2016]建筑师
    mds/journal.cc: 2929: FAILED assert解决
    Ceph根据Crush位置读取数据
    关于backfill参数建议
    rados put striper功能的调试
    Cephfs的文件存到哪里了
    为什么删除的Ceph对象还能get
  • 原文地址:https://www.cnblogs.com/beiyuoi/p/6071613.html
Copyright © 2011-2022 走看看