ShizukuQWQ @ 2023-05-20 10:56:53
#include<bits/stdc++.h>
using namespace std;
int n,m,ru[1145],x,a[1005],b[1005],at,bt,ans;
bool f[1005],ff[1005][1005];
vector<int> v[1145];
struct node{
int x,s;
}fr,sh;
queue<node> q;
int topo(){
for(int i=1;i<=n;i++){
if(ru[i]==0){
sh.x=i,sh.s=1;
q.push(sh);
}
}
while(!q.empty()){
fr=q.front();
q.pop();
ans=max(ans,sh.s);
for(int i=0;i<v[fr.x].size();i++){
int u=v[fr.x][i];
ru[u]--;
if(ru[u]<1){
sh.x=u;
sh.s=fr.s+1;
q.push(sh);
}
}
}
}
int main(){
cin>>n>>m;
for(int i=1;i<=m;i++){
int qwq,x;
cin>>qwq;
at=0;
bt=0;
int mx=0;
for(int j=1;j<=qwq;j++) cin>>x,f[x]=1,mx=max(mx,x);
for(int j=1;j<=mx;j++){
if(f[j]) a[++at]=j;
else b[++bt]=j;
}
for(int j=1;j<=at;j++){
for(int k=1;k<=bt;k++){
if(!ff[b[k]][a[j]]){
ff[b[k]][a[j]]=1;
v[b[k]].push_back(a[j]);
ru[a[j]]++;
}
}
}
}
topo();
cout<<ans;
}
re求助
by 喵仔牛奶 @ 2023-05-20 11:04:25
@gzhgzhgzh
for(int j=1;j<=mx;j++)
应为 for(int j=最小的x;j<=mx;j++)