AC & 求助
查看原帖
AC & 求助
481337
Pratty楼主2025/7/24 11:36
#include <bits/stdc++.h>
using namespace std;
const int N = 2100, M = 11000;
int n, m, k[N], vis[N], a, b, now;
vector<int> e[M], v[M], vt[N];
inline int dfs(int u) {
	if (vis[u]) return k[u];
	vis[u] = 1;
	for (int v : e[u]) k[u] = min(k[u], dfs(v) - 1);
	vt[k[u]].push_back(u);
	return k[u];
}
inline void rdfs(int u) {
	vis[u] = 1;
	for (int to : v[u]) if (!vis[to]) rdfs(to);
}
signed main () {
	scanf("%d%d", &n, &m);
	for (int i = 1; i <= n; i++) scanf("%d", &k[i]);
	for (int i = 1; i <= m; i++) {
		scanf("%d%d", &a, &b);
		e[a].push_back(b), v[b].push_back(a);
	}
	for (int i = 1; i <= n; i++) if (!vis[i]) dfs(i);
	for (int i = 1; i <= n; i++) for (int v : vt[i]) printf("%d ", v);
	printf("\n");
	for (int i = 1, now = n; i <= n; i++, now = n) {
		memset(vis, 0, sizeof(vis));
		rdfs(i);
		for (int j = n; j >= 1; j--) {
			if (now > j) break;
			for (int v : vt[j]) if (!vis[v]) now--;
		}
		printf("%d ", now);
	}
	return 0;
}

输入 a,ba,b 组成的图应该是 DAG 吧,那如果去掉 dfs 和 rdfs 中的 vis 判断就会死循环呢?

2025/7/24 11:36
加载中...