70pts,RE3个点求助

P1983 [NOIP2013 普及组] 车站分级

HZHDCM @ 2024-03-21 19:01:27

#include<bits/stdc++.h>
using namespace std;
int n,m,t,ans,cz[1001],dot[1001],kkk[1001];
bool vis[1001];
struct Edge{
    int next,to;
}edge[10000005];
int head[1001],cnt;
void add(int u,int v){
    edge[++cnt].next=head[u];
    edge[cnt].to=v;
    head[u]=cnt;
}
queue<int> q;
int main(){
    cin>>n>>m;
    for(int i=1;i<=m;i++){
        memset(vis,0,sizeof(vis));
        int si;
        cin>>si;
        for(int j=1;j<=si;j++){
            cin>>cz[j];
            vis[cz[j]]=1;
        }
        for(int j=cz[1];j<=cz[si];j++){
            if(!vis[j]){
                for(int k=cz[1];k<=cz[si];k++){
                    if(vis[k]){
                        add(j,k);
                        dot[k]++;
                    }
                }
            }
        }
    }
    for(int i=1;i<=n;i++){
        if(!dot[i]){
            q.push(i);
            kkk[i]++;
        }
    }
    ans=1;
    while(!q.empty()){
        int l=q.front();
        q.pop();
        for(int i=head[l];i;i=edge[i].next){
            int u=edge[i].to;
            kkk[u]=kkk[l]+1;
            ans=max(ans,kkk[u]);
            if(!--dot[u]){
                q.push(u);
            }
        }
    }
    cout<<ans;
    return 0;
}

by HZHDCM @ 2024-03-21 20:06:43

由于多了许多不必要的运算导致爆了,此帖结


|