求助,#15 全输出 −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;
}