1 solutions
-
0
Guest MOD
-
1
表示节点 到恐怖程度不超过 的节点的最短距离.因 ,用次BFS预处理即可.
#include <iostream> #include <vector> #include <queue> #include <cstring> using namespace std; const int MAXN = 1e5 + 5, MAXM = 105; const int INF = 0x3f3f3f3f; int n, m, q; int w[MAXN]; int dis[MAXM][MAXN]; vector<int> edges[MAXN]; void bfs(int a) { queue<int> que; for (int i = 1; i <= n; i++) { if (w[i] <= a) { que.push(i); dis[a][i] = 0; } } while (que.size()) { int u = que.front(); que.pop(); for (auto v : edges[u]) { if (dis[a][v] > dis[a][u] + 1) { dis[a][v] = dis[a][u] + 1; que.push(v); } } } } void solve() { memset(dis, INF, sizeof(dis)); cin >> n >> m >> q; for (int i = 1; i <= n; i++) cin >> w[i]; while (m--) { int u, v; cin >> u >> v; edges[u].push_back(v), edges[v].push_back(u); } for (int i = 1; i <= 100; i++) bfs(i); while (q--) { int p, a; cin >> p >> a; cout << (dis[a][p] == INF? -1 : dis[a][p]) << endl; } } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); solve(); return 0; }
- 1
Information
- ID
- 1475
- Time
- 3000ms
- Memory
- 256MiB
- Difficulty
- 7
- Tags
- (None)
- # Submissions
- 60
- Accepted
- 15
- Uploaded By