求助 gengen 队
查看原帖
求助 gengen 队
725951
Empty_Dream若梦轻旋楼主2024/8/2 21:05

求助,#15 全输出 −1-1,求调!!!!

玄 4 关!!!!!

@General0826 莱德,我需要你!!!

#include<bits/stdc++.h>
using namespace std;
#define int short
const int N = 3010;
int n, m, q, T, f[N][N][13];
bool vis[N], d[N][N];
vector<int> g[N];
void dfs(int u, int t) {
	if(vis[u]) return; vis[u] = true;
//	cout << u << ' ' << t << '\n';
	for(auto v : g[u]) {
		f[t][v][0] = min(f[t][v][0], u);
		dfs(v, t);
	}
}
signed main() {
	cin >> n >> m >> q;
	for(int i = 1, u, v; i <= m; i++) {
		cin >> u >> v;
		g[v].push_back(u);
	}
	memset(f, 0x3f, sizeof(f));
	for(int t = 1; t <= n; t++) {
		memset(vis, false, sizeof(vis));
		for(int j = 0; j <= 12; j++) f[t][t][j] = f[t][0][j] = 0; 
		dfs(t, t);
		for(int j = 1; j <= 12; j++) {
			for(int i = 1; i <= n; i++) {
				if(f[t][i][j - 1] <= n) f[t][i][j] = f[t][f[t][i][j - 1]][j - 1];
			}
		}
	}
	while(q--) {
		int s, t, k;
		cin >> s >> t >> k; k--;
		if(f[t][s][12] > n || (f[t][s][12] <= n && f[t][s][12] > 0)) cout << -1 << '\n';
		else {//目前锁定这里输出 -1
			for(int i = 12; i >= 0; i--) {
				if(k & (1 << i)) s = f[t][s][i];
			}
			if(s > 0) cout << s << '\n';
			else cout << -1 << '\n';
		}
	}
	return 0;
}
2024/8/2 21:05
加载中...