40分求助
查看原帖
40分求助
704655
CAICAIA楼主2023/8/13 19:02
#include<bits/stdc++.h>
using namespace std;
int n,m;
struct node{
	int to;
	int last;
}edge[1001000];
int head[1100]={0},in[1100]={0},k=0;;
void add(int x,int y){
	k++;
	edge[k].to=y;
	edge[k].last=head[x];
	head[x]=k;
}
int aa[1100]={0};
int main(){
	int x;
	int sum=0,ans=0;
	scanf("%d %d",&n,&m);
	bool flag[1100]={0};
	for(int i=1;i<=m;i++){
		scanf("%d",&x);
		for(int j=1;j<=x;j++){
			scanf("%d",&aa[j]);
		}
		int ki=2;
		for(int j=aa[1]+1;j<aa[x];j++){
			if(j==aa[ki]){
				ki++;
				continue;
			}
			for(int o=1;o<=x;o++){
				add(j,aa[o]);
				in[aa[o]]++;
				sum++;
			}
		}
	}
	/*
	for(int i=1;i<=n;i++){
		for(int j=head[i];j!=0;j=edge[j].last){
			printf("%d to %d\n",i,edge[j].to);
			
		}
		//printf("i=%d %d\n",i,in[i]);
	}
	*/
	
	while(sum>0){
		for(int i=1;i<=n;i++){
			if(in[i]==0&&flag[i]==0){
				for(int j=head[i];j!=0;j=edge[j].last){
					in[edge[j].to]--;
					//printf("%d to %d\n",i,edge[j].to);
					sum--;
				}
				flag[i]=1;
			}
		}
		ans++;
		/*
		for(int i=1;i<=n;i++){
			printf("%d ",in[i]);
		}
		printf("\nsum=%d\n",sum);
		*/
	}
	/*
	for(int i=1;i<=n;i++){
		printf("%d ",in[i]);
	}
	*/
	cout<<ans+1;
	return 0;
}
2023/8/13 19:02
加载中...