求助一道站外题,题目是上面的图片 我的思路是用BFS求最短路径,是双数就输出Town,反之输出Road,但超时了。哪位大佬帮帮忙改一下代码。```cpp #include <bits/stdc++.h> using namespace std;
///////////////////////////////////////////// ///////////////////////////////////////////// ///////////00/////////////////////000000///// //////////0//0//////////////////00/////////// /////////0////0///////////////00///////////// ////////0//////0/////////////00////////////// ///////0000000000////////////00////////////// //////0//////////0////////////00///////////// /////0////////////0/////////////00/////////// ////0//////////////0//////////////000000///// ///////////////////////////////////////////// /////////////////////////////////////////////
vector graph[100011];
int bfs(int n , int s , int t , vector graph[100011] , vector &dist){ queue q; q.push(s); dist[s] = 0; while (!q.empty()) { int u = q.front(); q.pop(); for (int v : graph[u]) { if (dist[v] == -1) { dist[v] = dist[u] + 1; q.push(v); if (v == t) { return dist[v]; } } } } return -1; }
int main() { int n, m; cin >> n >> m; for (int i = 0; i < n - 1; i++) { int u, v; cin >> u >> v; graph[u].push_back(v); graph[v].push_back(u); } for(int i=0;i<m;i++){ vector dist(n + 1, -1); int s , t; cin >> s >> t; int ans = bfs(n, s, t, graph, dist); cout << ((ans % 2)? "Road\n":"Town\n"); } }
数据范围是n(2~100000),q(1~100000)