topo 70分RE求助!

P1983 [NOIP2013 普及组] 车站分级

hexz01 @ 2023-10-04 22:15:51

#include <iostream>
#include <queue>
using namespace std;
const int N=1007, M=1000007;
int n, m;
int s[N][N];
int head[N], nxt[M<<1], to[M<<1], in[N], tot=0;//u->v: level[u]<level[v]
bool f[N];
void add(int u, int v){
    tot++;
    nxt[tot]=head[u];
    head[u]=tot;
    to[tot]=v;
    in[v]++;
}
int main(){
    ios::sync_with_stdio(0);cin.tie(0);
    cin>>n>>m;
    for(int i=1;i<=m;i++){
        cin>>s[i][0];
        for(int j=1;j<=s[i][0];j++){
            cin>>s[i][j];
        }
        for(int j=1;j<=s[i][0];j++){
            for(int k=1;k<s[i][0];k++){
                for(int t=s[i][k]+1;t<s[i][k+1];t++){
                    add(t, s[i][j]);
                    f[t]=1;f[s[i][j]]=1;
                }
            }
        }
    }
    int cnt=0;
    for(int i=1;i<=n;i++){
        cnt+=f[i];
    }
    queue<int> q;
    int ans=0;
    while(cnt){
        for(int i=1;i<=n;i++){
            if(in[i]==0 && f[i]){
                q.push(i);
                f[i]=0;
                cnt--;
            }
        }
        while(q.size()){
            int now=q.front();q.pop();
            for(int i=head[now];i;i=nxt[i]){
                int v=to[i];
                if(f[v]) in[v]--;
            }
        }
        ans++;
    }
    cout<<ans<<endl;
    return 0;
}

8#9#10RE求调。


|