1 条题解

  • 4
    @ 2022-8-18 13:10:56
    #include<cstdio> 
    
    #define N 10010
    #define M 1000100
    int n,m,i,x,y,k;
    int t[N];
    struct edge
    {
        int to,next;
    }l[M<<1];int e;
    void add_e(int x,int y)
    {
        l[++e]=(edge){y,t[x]};t[x]=e;
    }
    
    int next[N<<1],pre[N<<1];
    int w[N],q[N],dy[N];
    
    void push(int x)
    {
        pre[next[x]=next[N+w[x]]]=x;
        next[pre[x]=N+w[x]]=x;
    }
    void del(int x)
    {
        pre[next[x]]=pre[x];next[pre[x]]=next[x];
    }
    
    int main()
    {
        freopen("1.in","r",stdin);
        scanf("%d%d",&n,&m);
        for(i=1;i<=m;++i)
        {
            scanf("%d%d",&x,&y);
            add_e(x,y);add_e(y,x); 
        }
        for(i=1;i<=n;++i) push(i);
        int now=0,ans=0;
        for(k=n;k;--k,++now)
        {
            while(!next[N+now])--now;
            x=next[N+now];
            del(x);
            q[k]=x;dy[x]=k;
            int sum=1;
            for(i=t[x];y=l[i].to;i=l[i].next)
            if(!dy[y]) 
            {
                del(y);
                ++w[y];
                push(y);
            }
            else ++sum;
            if(sum>ans)ans=sum;
        }
        printf("%d\n",ans);
    }
    
    • 1

    信息

    ID
    1006
    时间
    2000ms
    内存
    256MiB
    难度
    7
    标签
    递交数
    35
    已通过
    10
    上传者