10pts求调
查看原帖
10pts求调
377194
ziansheng楼主2023/6/3 20:56
#include<iostream>
#include<cstring>
#include<vector>
#include<queue>
using namespace std;
typedef long long ll;
#define mem(a,m) memset(a,m,sizeof(a))
const int maxn = 2010;
bool vis[maxn];
vector<int> adj[maxn]; 
int ind[maxn];
queue<int> q;
int lev[maxn],ans;
int x[maxn];
int main(){
	int n,m;
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		int s;
		cin >> s;
		for(int j=1;j<=s;j++){
			cin>>x[j];
			adj[n+i].push_back(x[j]);
			ind[x[j]] ++;
			if (j != 1){
				for(int k=x[j-1] + 1;k<=x[j]-1;k++){
					adj[k].push_back(n+i);
					ind[n+i] ++ ;
				}
			}
		} 
//		for(int j=1;j<=n;j++){
//			if (vis[j] == false && l1 <= j && l2 >= j){
//				adj[j].push_back(n+i);
//				ind[n+i] ++;
//			}
//		} 
	}
	for(int i=1;i<=n;i++){
		if(ind[i] == 0) {
			lev[i] = 1;
			q.push(i);
		} 
	}
	while (!q.empty()){
		int tp = q.front();
		q.pop();
		for(int i=0;i<adj[tp].size();i++){
			int v = adj[tp][i];
			lev[v] = lev[tp] + !(v > n);
			ans = max(ans,lev[v]);
			ind[v] -- ;
			if(ind[v] == 0){
				q.push(v);
			}	
		}
	}
	cout << ans << endl;
	return 0;
}
2023/6/3 20:56
加载中...