zoukankan      html  css  js  c++  java
  • noip车站分级 拓扑排序

    题目传送门

    这道题呢 每次输入一段数就把1~n里面没有在这组数里面的数和他们连一波 表示这些数比他们等级低 然后就搞一搞就好了哇

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    const int M=3507;
    int read(){
        int ans=0,f=1,c=getchar();
        while(c<'0'||c>'9'){if(c=='-') f=-1; c=getchar();}
        while(c>='0'&&c<='9'){ans=ans*10+(c-'0'); c=getchar();}
        return ans*f;
    }
    int f[M][M],cnt;
    int in[M],x,n,m,v,sum[M];
    int head,tail,ans=1,q[M],num[M];
    int main()
    {
        n=read(); m=read();
        while(m--){
            v=read(); cnt++;
            for(int i=1;i<=v;i++) q[i]=read(),sum[q[i]]=cnt;
            for(int i=q[1];i<=q[v];i++)if(sum[i]!=cnt){
                for(int k=1;k<=v;k++) 
                 if(!f[i][q[k]]) f[i][q[k]]=1,in[q[k]]++;
            }
        }
        for(int i=1;i<=n;i++) if(!in[i]) q[tail++]=i,num[i]++;
        while(head!=tail){
            int x=q[head++]; if(head>M) head=0;
            for(int i=1;i<=n;i++) if(f[x][i]){
                in[i]--;
                if(!in[i]) {q[tail++]=i; num[i]=num[x]+1;}
            }
        }
        for(int i=1;i<=n;i++) ans=max(ans,num[i]);
        printf("%d
    ",ans);
        return 0;
    }
    View Code
  • 相关阅读:
    登录界面
    动手动脑
    关于二进制
    Java考试
    D
    威尔逊定理 k!%p
    11.46.2020质检
    最长上升序列输出方案
    问题 G: 汽车的最终位置
    奶牛大会(二分)
  • 原文地址:https://www.cnblogs.com/lyzuikeai/p/7120944.html
Copyright © 2011-2022 走看看