why RE
查看原帖
why RE
704668
WZWZWZWY楼主2023/8/12 19:41

寄录

#include <iostream>

#include <queue>

using namespace std;

int s,a[1005],x[1005];

int in[1005],depth[1005];

int nxt[1000005],head[1000005],to[1000005],cnt=-1;

void add(int u, int v) {

  	nxt[++cnt] = head[u];  // 当前边的后继

  	head[u] = cnt;         // 起点 u 的第一条边

  	to[cnt] = v;           // 当前边的终点

}

queue<int> q;

int main(){

	int n,m;

	cin >> n >> m;

	for (int i = 1; i <= n; i++) head[i] = -1;

	for (int i = 1; i <= m; i++) {

		for (int j = 1; j <= n; j++) a[j] = 0;

		cin >> s;

		for (int j = 1; j <= s; j++){

			cin >> x[j];

			a[x[j]] = 1;

		}

		for (int j = 1; j <= s; j++){

			for (int k = x[1]; k <= x[s]; k++){

				if (!a[k]) {

					add(x[j],k);

					in[k]++;

				}

			}

		}

	}

	for (int i = 1; i <= n; i++){

		if (!in[i]) {

			q.push(i);

			depth[i] = 1;

		}

	}

	while(q.size()){

		int u = q.front();

		q.pop();

		for (int i = head[u]; i != -1; i = nxt[i]){

			int v = to[i];

//			depth[v] = max(depth[v],depth[u]+1);

			in[v]--;

			if (in[v] == 0){

				q.push(v);

				depth[v] = depth[u]+1;

			}

		}

	}

	int ans=0;

	for (int i = 1; i <= n; i++)ans = max(ans,depth[i]);

	cout << ans;

}
2023/8/12 19:41
加载中...