Submission #1137061

#TimeUsernameProblemLanguageResultExecution timeMemory
1137061Trisanu_DasTorrent (COI16_torrent)C++20
69 / 100
71 ms21316 KiB
#include <bits/stdc++.h>
using namespace std;
int n, a, b, x, y;
vector<int> edge[300001], dis(300001, 0);
stack<int> stk;
vector<int> instk(300001, false);
int main() {
    ios::sync_with_stdio(0), cin.tie(0);
    cin >> n >> a >> b;
    for (int i = 1; i < n; ++i) {
        cin >> x >> y;
        edge[x].push_back(y);
        edge[y].push_back(x);
    }
    queue<int> q;
    q.push(a), q.push(b);
    stk.push(a), stk.push(b);
    instk[a] = instk[b] = true;
    while (!q.empty()) {
        int u = q.front(); q.pop();
        for (auto v : edge[u]) 
            if (!instk[v]) stk.push(v), instk[v] = true, q.push(v);
    }
    while (!stk.empty()) {
        int u = stk.top(); stk.pop();
        instk[u] = false;
        vector<int> vec;
        for (auto v : edge[u]) 
            if (!instk[v] && v != a && v != b) vec.push_back(dis[v]);
        sort(vec.rbegin(), vec.rend());
        for (int i = 0; i < vec.size(); ++i) 
            dis[u] = max(dis[u], vec[i] + i + 1);
    }
    cout << max(dis[a], dis[b]);
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...