求助,T1983,莫名其妙TLE+RE,数据点自己测都过了,求大佬康康,帮帮我
  • 板块学术版
  • 楼主yan_jun
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/9/25 22:34
  • 上次更新2024/9/25 22:51:51
查看原帖
求助,T1983,莫名其妙TLE+RE,数据点自己测都过了,求大佬康康,帮帮我
201470
yan_jun楼主2024/9/25 22:34
#include<bits/stdc++.h>
#define inl inline
#define re register
#define ll long long
using namespace std;
inl int read() {
    int sum=0,f=1;char c=getchar();
    while(!isdigit(c)) {if(c=='-') f=-1;c=getchar();}
    while(isdigit(c)) {sum=(sum<<3)+(sum<<1)+(c^48);c=getchar();}
    return sum*f;
}
const int N=1010;
int n,m,head[N],tot;
struct node{
    int to,nxt;
}e[N<<1];
inl void add(int u,int v) {
    e[++tot].to=v;
    e[tot].nxt=head[u];
    head[u]=tot;
}
int s[N][N],ans,r[N];
bool vis[N],v[N][N];
struct Node {
    int u,level;
};
inl void top() {
    queue<Node> q;
    for(re int i=1;i<=n;i++) {
        if(!r[i]) q.push(Node{i,1});
    }
    ans=1;
    while(!q.empty()) {
        Node tmp=q.front();
        q.pop();
        int u=tmp.u,l=tmp.level;
        for(re int i=head[u];i;i=e[i].nxt) {
            int v=e[i].to;
            r[v]--;
            if(!r[v]) {
                q.push(Node{v,l+1});
                ans=max(ans,l+1);
            }
        }
    }
}
int main() {
    n=read(),m=read();
    for(re int i=1;i<=m;i++) {
        s[i][0]=read();
        memset(vis,0,sizeof(vis));
        for(re int j=1;j<=s[i][0];j++) {
            s[i][j]=read();
            vis[s[i][j]]=1;
        }
        for(re int j=s[i][1];j<=s[i][s[i][0]];j++) {
            if(vis[j]) continue;
            for(re int k=1;k<=s[i][0];k++) {
                if(!v[j][s[i][k]]) {
                    add(j,s[i][k]);
                    r[s[i][k]]++;
                    v[j][s[i][k]]=1;
                }
            }
        }
    }
    top();
    printf("%d\n",ans);
    return 0;
}
2024/9/25 22:34
加载中...