码迷,mamicode.com
首页 > 其他好文 > 详细

BZOJ 4579: [Usaco2016 Open]Closing the Farm

时间:2016-11-16 22:32:29      阅读:457      评论:0      收藏:0      [点我收藏+]

标签:ble   div   memory   ace   code   size   line   namespace   cst   

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;
}

  

BZOJ 4579: [Usaco2016 Open]Closing the Farm

标签:ble   div   memory   ace   code   size   line   namespace   cst   

原文地址:http://www.cnblogs.com/beiyuoi/p/6071613.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!