70pts,RE3个点求助
查看原帖
70pts,RE3个点求助
817681
HZHDCM楼主2024/3/21 19:01
#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;
}
2024/3/21 19:01
加载中...