60pts求调(悬关
  • 板块P1137 旅行计划
  • 楼主tianyk
  • 当前回复3
  • 已保存回复3
  • 发布时间2023/10/6 21:25
  • 上次更新2023/11/2 15:08:21
查看原帖
60pts求调(悬关
877101
tianyk楼主2023/10/6 21:25

rt,

代码如下:

评测结果\text {评测结果}

#include <bits/stdc++.h>
using namespace std;
const int N = 1e5, M = 2e5;
int ind[N], h[N], dis[N], n, m, idx;
queue<int>q;

struct res {
	int to, nxt;
} edge[M];

void add(int a, int b) {
	edge[idx].to = b;
	edge[idx].nxt = h[a];
	h[a] = idx++;
}

void init() {
	memset(h, -1, sizeof(h));
	scanf("%d %d", &n, &m);
	for (int i = 1; i <= m; i++) {
		int u, v;
		scanf("%d %d", &u, &v);
		add(u, v);
		ind[v]++;
	}
}

void topsort() {
	for (int i = 1; i <= n; i++) {
		if (!ind[i]) {
			q.push(i);
			dis[i]++;
		}
	}
	while (!q.empty()) {
		for (int i = h[q.front()]; i != -1; i = edge[i].nxt) {
			int v = edge[i].to;
			dis[v] = max(dis[v], dis[q.front()] + 1);
			ind[v]--;
			if (!ind[v])
				q.push(v);
		}
		q.pop();
	}
}

int main() {
	init();
	topsort();
	for (int i = 1; i <= n; i++)
		printf("%d\n", dis[i]);
	return 0;
}
2023/10/6 21:25
加载中...