Submission #1756045
Source Code Expand
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll, ll> P;
#define each(i,a) for (auto&& i : a)
#define FOR(i,a,b) for (ll i=(a),__last_##i=(b);i<__last_##i;i++)
#define RFOR(i,a,b) for (ll i=(b)-1,__last_##i=(a);i>=__last_##i;i--)
#define REP(i,n) FOR(i,0,n)
#define RREP(i,n) RFOR(i,0,n)
#define __GET_MACRO3(_1, _2, _3, NAME, ...) NAME
#define rep(...) __GET_MACRO3(__VA_ARGS__, FOR, REP)(__VA_ARGS__)
#define rrep(...) __GET_MACRO3(__VA_ARGS__, RFOR, RREP)(__VA_ARGS__)
#define pb push_back
#define all(a) (a).begin(),(a).end()
#define chmin(x,v) x = min(x, v)
#define chmax(x,v) x = max(x, v)
const ll linf = 1e18;
const double eps = 1e-12;
const double pi = acos(-1);
template<typename T>
istream& operator>>(istream& is, vector<T>& vec) {
each(x,vec) is >> x;
return is;
}
template<typename T>
ostream& operator<<(ostream& os, const vector<T>& vec) {
rep(i,vec.size()) {
if (i) os << " ";
os << vec[i];
}
return os;
}
template<typename T>
ostream& operator<<(ostream& os, const vector< vector<T> >& vec) {
rep(i,vec.size()) {
if (i) os << endl;
os << vec[i];
}
return os;
}
const ll lg = 30;
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
ll n; cin >> n;
vector<vector<ll>> G(n);
rep(i, n-1) {
ll a, b; cin >> a >> b; --a, --b;
G[a].pb(b);
G[b].pb(a);
}
vector<vector<ll>> par(n, vector<ll>(lg));
vector<ll> h(n);
function<void(ll, ll, ll)> dfs = [&](ll v, ll prev, ll depth) {
par[v][0] = prev;
h[v] = depth;
each(to, G[v]) {
if (to == prev) continue;
dfs(to, v, depth+1);
}
};
dfs(0, -1, 0);
rep(i, 1, lg) rep(j, n) {
ll p = par[j][i-1];
if (p < 0) par[j][i] = -1;
else par[j][i] = par[p][i-1];
}
auto lca = [&](ll a, ll b) {
if (h[a] > h[b]) swap(a, b);
ll d = h[b]-h[a];
rep(i, lg) {
if (d & (1LL<<i)) {
b = par[b][i];
}
}
assert(b >= 0 && h[a] == h[b]);
if (a == b) return a;
rrep(i, lg) {
if (par[a][i] != par[b][i]) {
a = par[a][i];
b = par[b][i];
}
assert(a != b);
}
return par[a][0];
};
ll Q; cin >> Q;
rep(q, Q) {
ll a, b; cin >> a >> b; --a, --b;
// cout << "!" << a << " " << b << " " << lca(a, b) << endl;
// cout << h[a] << " " << h[b] << " " << endl;
cout << h[a] + h[b] - h[lca(a, b)]*2 + 1 << endl;
}
}
Submission Info
Submission Time |
|
Task |
D - 閉路 |
User |
drafear |
Language |
C++14 (GCC 5.4.1) |
Score |
100 |
Code Size |
2725 Byte |
Status |
AC |
Exec Time |
350 ms |
Memory |
43904 KB |
Judge Result
Set Name |
Sample |
Subtask1 |
Subtask2 |
Score / Max Score |
0 / 0 |
30 / 30 |
70 / 70 |
Status |
|
|
|
Set Name |
Test Cases |
Sample |
subtask0_sample01.txt, subtask0_sample02.txt, subtask0_sample03.txt |
Subtask1 |
subtask1_01.txt, subtask1_02.txt, subtask1_03.txt, subtask1_04.txt, subtask1_05.txt, subtask1_06.txt, subtask1_07.txt, subtask1_08.txt, subtask1_09.txt, subtask1_10.txt, subtask1_11.txt, subtask1_12.txt |
Subtask2 |
subtask0_sample01.txt, subtask0_sample02.txt, subtask0_sample03.txt, subtask1_01.txt, subtask1_02.txt, subtask1_03.txt, subtask1_04.txt, subtask1_05.txt, subtask1_06.txt, subtask1_07.txt, subtask1_08.txt, subtask1_09.txt, subtask1_10.txt, subtask1_11.txt, subtask1_12.txt, subtask2_01.txt, subtask2_02.txt, subtask2_03.txt, subtask2_04.txt, subtask2_05.txt, subtask2_06.txt, subtask2_07.txt, subtask2_08.txt, subtask2_09.txt, subtask2_10.txt, subtask2_11.txt, subtask2_12.txt |
Case Name |
Status |
Exec Time |
Memory |
subtask0_sample01.txt |
AC |
1 ms |
256 KB |
subtask0_sample02.txt |
AC |
1 ms |
256 KB |
subtask0_sample03.txt |
AC |
1 ms |
256 KB |
subtask1_01.txt |
AC |
97 ms |
43264 KB |
subtask1_02.txt |
AC |
97 ms |
43264 KB |
subtask1_03.txt |
AC |
1 ms |
256 KB |
subtask1_04.txt |
AC |
1 ms |
256 KB |
subtask1_05.txt |
AC |
2 ms |
640 KB |
subtask1_06.txt |
AC |
2 ms |
640 KB |
subtask1_07.txt |
AC |
119 ms |
34432 KB |
subtask1_08.txt |
AC |
127 ms |
34432 KB |
subtask1_09.txt |
AC |
119 ms |
34432 KB |
subtask1_10.txt |
AC |
119 ms |
34432 KB |
subtask1_11.txt |
AC |
126 ms |
34432 KB |
subtask1_12.txt |
AC |
124 ms |
34432 KB |
subtask2_01.txt |
AC |
274 ms |
43904 KB |
subtask2_02.txt |
AC |
268 ms |
43776 KB |
subtask2_03.txt |
AC |
172 ms |
512 KB |
subtask2_04.txt |
AC |
175 ms |
512 KB |
subtask2_05.txt |
AC |
184 ms |
896 KB |
subtask2_06.txt |
AC |
181 ms |
1024 KB |
subtask2_07.txt |
AC |
323 ms |
34816 KB |
subtask2_08.txt |
AC |
306 ms |
34688 KB |
subtask2_09.txt |
AC |
323 ms |
34688 KB |
subtask2_10.txt |
AC |
348 ms |
34816 KB |
subtask2_11.txt |
AC |
350 ms |
34816 KB |
subtask2_12.txt |
AC |
350 ms |
34816 KB |