zoukankan      html  css  js  c++  java
  • BZOJ4296 : [PA2015]Mistrzostwa

    先不断将度数小于D的点都删去,再找到剩下的图里最大的连通块即可。

    #include<cstdio>
    #include<algorithm>
    #define N 200010
    int n,m,D,x,y,i,g[N],v[N<<1],nxt[N<<1],ed,d[N],h,t,q[N],del[N],ans,fin[N];
    inline void read(int&a){char c;while(!(((c=getchar())>='0')&&(c<='9')));a=c-'0';while(((c=getchar())>='0')&&(c<='9'))(a*=10)+=c-'0';}
    inline void add(int x,int y){d[x]++;v[++ed]=y;nxt[ed]=g[x];g[x]=ed;}
    void dfs(int x){
      if(del[x])return;
      del[q[++t]=x]=1;
      for(int i=g[x];i;i=nxt[i])dfs(v[i]);
    }
    int main(){
      read(n),read(m),read(D);
      while(m--)read(x),read(y),add(x,y),add(y,x);
      for(i=h=1;i<=n;i++)if(d[i]<D)del[q[++t]=i]=1;
      while(h<=t)for(i=g[x=q[h++]];i;i=nxt[i]){
        d[v[i]]--;
        if(d[v[i]]<D&&!del[v[i]])del[q[++t]=v[i]]=1;
      }
      for(i=1;i<=n;i++)if(!del[i]){
        t=0,dfs(i);
        if(t>ans)for(ans=t,x=1;x<=t;x++)fin[x]=q[x];
      }
      if(!ans)return puts("NIE"),0;
      if(ans>1)std::sort(fin+1,fin+ans+1);
      for(printf("%d
    ",ans),i=1;i<=ans;i++)printf("%d ",fin[i]);
      return 0;
    }
    

      

  • 相关阅读:
    P2679 子串
    线段树优化建边
    P2444 [POI2000]病毒
    P3966 [TJOI2013]单词
    4327: JSOI2012 玄武密码
    UVA1449 Dominating Patterns
    P1250 种树
    P2255 [USACO14JAN]记录奥林比克
    SP283 NAPTIME
    P3436 [POI2006]PRO-Professor Szu
  • 原文地址:https://www.cnblogs.com/clrs97/p/4854721.html
Copyright © 2011-2022 走看看