差0.08秒,求优化
查看原帖
差0.08秒,求优化
574859
linyukun楼主2023/3/3 11:25
#include<bits/stdc++.h>
using namespace std;
int n,m,ru[1005],a[1005][1005],s,k,cnt=-1,st,e;
bool vis[1005];
queue<int>q;
int main(){
	ios::sync_with_stdio(false);
	cin>>n>>m;
	for(int i=0;i<m;i++){
		memset(vis,0,sizeof(vis));
		cin>>s;
		for(int j=0;j<s;j++){
			cin>>k;
			if(j==0)st=k;
			if(j==s-1)e=k;
			vis[k]=1;
		}
		for(int j=st;j<=e;j++){
			if(!vis[j]){
				for(int z=st;z<=e;z++){
					if(vis[z]&&a[z][j]==0){
						a[z][j]=1;
						ru[j]++;
					}
				}
			}
		}
	}
	memset(vis,0,sizeof(vis));
	for(int i=1;i<=n;i++){
  		a[0][i]=1;
		ru[i]++;
	}
	q.push(0);
	vis[0]=1;
	while(!q.empty()){
		cnt++;
		while(!q.empty()){
			int x=q.front();
			for(int i=1;i<=n;i++){
				if(a[x][i]&&vis[i]==0){
					ru[i]--;
				}
			}
			q.pop();
		}
		for(int i=1;i<=n;i++){
			if(ru[i]==0&&vis[i]==0){
				vis[i]=1;
				q.push(i);
			}
		}
	}
	cout<<cnt<<endl;
	return 0;
}
2023/3/3 11:25
加载中...