Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //
- //long long gcd(long long a, long long b) {
- // if (a == 0) {
- // return b;
- // }
- // return gcd(b % a, a);
- //}
- //
- //long long lcm(long long a, long long b) {
- // return a * b / gcd(a, b);
- //}
- vector <vector <int>> v;
- vector <int> maxh;
- vector <bool> used;
- void dfs1(int node, vector <int> &dist, int length) {
- dist[node] = length;
- used[node] = 1;
- for (int i = 0; i < v[node].size(); i++)
- {
- if (!used[i]) {
- dfs1(v[node][i], dist, length + 1);
- }
- }
- }
- void dfs2(int node, int length)
- {
- used[node] = 1;
- maxh[node] = length;
- for (int i = 0; i < v[node].size(); i++) {
- if (!used[i]) {
- dfs2(i, length + 1);
- maxh[node] = max(maxh[node], maxh[i]);
- }
- }
- }
- void task1() {
- int n, x;
- cin >> n >> x;
- --x;
- v.resize(n);
- used.resize(n + 1);
- for (int i = 1; i < n; i++) {
- int a, b;
- cin >> a >> b;
- --a, --b;
- v[a].push_back(b);
- v[b].push_back(a);
- }
- vector <vector <int>> d(2, vector <int> (n));
- used.assign(n, false);
- dfs1(0, d[0], 0);
- used.assign(n, false);
- dfs1(x, d[1], 0);
- used.assign(n, false);
- maxh.resize(n);
- dfs2(0, 0);
- int res = 0;
- for (int i = 0; i < n; i++) {
- if (d[1][i] < d[0][i]) {
- res = max(res, maxh[i]);
- }
- }
- cout << 2 * res;
- }
- int main() {
- task1();
- system("PAUSE");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement