100pts求调
  • 板块P1137 旅行计划
  • 楼主0xfzyy
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/4/6 11:00
  • 上次更新2024/4/6 12:55:55
查看原帖
100pts求调
1049704
0xfzyy楼主2024/4/6 11:00

#include <bits/stdc++.h> using namespace std; vector v[200001]; queue q; int deg[100001];```cpp #include <bits/stdc++.h> using namespace std; vector v[200001]; queue q; int deg[100001]; int dp[100001]; int n, m;

void tp() { for (int i = 1; i <= n; i++) { if (deg[i] == 0) { q.push(i); } } memset(dp, 0, sizeof(dp)); dp[1] = 1; while (!q.empty()) { int k = q.front(); q.pop();

	for (auto x: v[k]) {
		deg[x]--;
		if (deg[x] == 0) {
			dp[x] = max(dp[x], dp[k] + 1);
			q.push(x);
		}
	}
}

} int main() { cin >> n >> m;

int x, y;
for (int i = 1; i <= m; i++) {
	cin >> x >> y;
	v[x].push_back(y);
	deg[y]++;
}


tp();
for (int i = 1; i <= n; i++) {
	cout << dp[i] + 1 << endl;
}

return 0;

}


int dp[100001];
int n, m;

void tp() {
	for (int i = 1; i <= n; i++) {
		if (deg[i] == 0) {
			q.push(i); 
		} 
	}	
	memset(dp, 0, sizeof(dp));
	dp[1] = 1;
	while (!q.empty()) {
		int k = q.front();
		q.pop();
		
		for (auto x: v[k]) {
			deg[x]--;
			if (deg[x] == 0) {
				dp[x] = max(dp[x], dp[k] + 1);
				q.push(x);
			}
		}
	}
}
int main() {
	cin >> n >> m;
	
	int x, y;
	for (int i = 1; i <= m; i++) {
		cin >> x >> y;
		v[x].push_back(y);
		deg[y]++;
	}
	
	
	tp();
	for (int i = 1; i <= n; i++) {
		cout << dp[i] + 1 << endl;
	}
	
	return 0;
}
                                 
                       各位,这代码在起初没把结果+1的时候,样例过了,但是发现好像跟测试点每个答案差一,于是在结果加了1,虽然全对,但是实在太诡异了,求调
2024/4/6 11:00
加载中...