zoukankan      html  css  js  c++  java
  • 旧题复习[1]

     P1197 [JSOI2008]星球大战

    [2016-11-15]

    注意一开始也要求一下cc个数

    加入一个点可能连起好多个cc来,用并查集维护连通性

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <cmath>
    using namespace std;
    const int N=4e5+5,M=2e5+5,INF=1e9;
    inline int read(){
        char c=getchar();int x=0,f=1;
        while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
        while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
        return x*f;
    }
    int n,m,k,a[N],des[N],x,y,ans[N];
    struct edge{
        int v,w,ne;
    }e[M<<1];
    int h[N],cnt=0;
    inline void ins(int u,int v){
        cnt++;
        e[cnt].v=v;e[cnt].ne=h[u];h[u]=cnt;
        cnt++;
        e[cnt].v=u;e[cnt].ne=h[v];h[v]=cnt;
    }
    
    int fa[N];
    inline int find(int x){return x==fa[x]?x:fa[x]=find(fa[x]);}
    int tot=0;
    inline void unn(int x,int y){
        int f1=find(x),f2=find(y);
        if(f1!=f2) fa[f1]=f2,tot--;
    }
    void add(int u){
        for(int i=h[u];i;i=e[i].ne){
            int v=e[i].v;
            if(!des[v]) unn(u,v);
        }
    }
    int main(){
        n=read();m=read();
        for(int i=1;i<=m;i++){x=read()+1;y=read()+1;ins(x,y);}
        k=read();
        for(int i=1;i<=k;i++) a[i]=read()+1,des[a[i]]=1;
        
        for(int i=1;i<=n;i++) fa[i]=i;
        for(int i=1;i<=n;i++) if(!des[i]){
            tot++;
            add(i);
        }
        ans[k+1]=tot;
        for(int i=k;i>=1;i--){
            tot++;
            des[a[i]]=0;
            add(a[i]);
            ans[i]=tot;
        }
        for(int i=1;i<=k+1;i++) printf("%d
    ",ans[i]);
    }
  • 相关阅读:
    将Temporary文件夹里的Logo文件转移到Logo文件夹
    VS2013密匙
    Android SDK Tools 更新
    安装 phoneGap
    动态创建的DOM元素进行事件绑定
    不用安装Oracle_Client就能使用PLSQL_Developer
    POI 导出Excel
    mysql 通过IP连接
    微信 xml 转 Map
    uploadify springMVC
  • 原文地址:https://www.cnblogs.com/candy99/p/6064719.html
Copyright © 2011-2022 走看看