Submission #1756085
Source Code Expand
#include <bits/stdc++.h>
#define INF 1e+9
using namespace std;
typedef pair<int,int> P;
class RMQ{
int n,seg,init;
vector<P> dat;
public:
RMQ(int siz,int def) : n(siz),init(def),seg(1){
while(seg < n) seg *= 2;
dat.resize(seg * 2 - 1);
for(int i = 0;i < seg;i++) dat[i + seg - 1] = P(init,i);
for(int i = seg - 2;i >= 0;i--) dat[i] = min(dat[i * 2 + 1],dat[i * 2 + 2]);
}
void update(int i,int x){
i += seg - 1;
dat[i] = P(x,i - seg + 1);
while(i){
i = (i - 1) / 2;
dat[i] = min(dat[i * 2 + 1],dat[i * 2 + 2]); //do
}
}
P get(int a = 0,int b = -1,int k = 0,int l = 0,int r = -1){
if(b == -1) b = seg;
if(r == -1) r = seg;
if(b <= l || r <= a) return P(init,-1);
if(a <= l && r <= b) return dat[k];
return min(get(a,b,k * 2 + 1,l,(l + r) / 2),get(a,b,k * 2 + 2,(l + r) / 2,r)); //do
}
};
class EulerTour{
int cnt;
public:
vector<int> first,last,depth,line;
vector<vector<int> > g;
EulerTour(int n) : g(n),first(n),last(n),depth(n){}
void add(int u, int v) {
g[u].push_back(v);
g[v].push_back(u);
}
void build(){
cnt = 0;
dfs(0,-1,0);
}
void dfs(int v,int par,int d){
depth[v] = d;
line.push_back(v);
first[v] = cnt++;
for(int next : g[v]){
if(next == par) continue;
dfs(next,v,d + 1);
cnt++;
line.push_back(v);
}
}
};
int main(){
int n,q;
cin >> n;
EulerTour et(n);
for(int i = 0;i < n - 1;i++){
int x,y;
cin >> x >> y; x--;y--;
et.add(x,y);
}
et.build();
RMQ rmq(et.line.size(),INF);
for(int i = 0;i < et.line.size();i++) rmq.update(i,et.depth[et.line[i]]);
cin >> q;
for(int i = 0;i < q;i++){
int x,y;
cin >> x >> y; x--;y--;
int p = rmq.get(min(et.first[x],et.first[y]),max(et.first[x],et.first[y]) + 1).first;
cout << et.depth[x] + et.depth[y] - p * 2 + 1 << endl;
}
return 0;
}
Submission Info
Submission Time |
|
Task |
D - 閉路 |
User |
hoget157 |
Language |
C++14 (GCC 5.4.1) |
Score |
100 |
Code Size |
1874 Byte |
Status |
AC |
Exec Time |
388 ms |
Memory |
15476 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 |
91 ms |
14836 KB |
subtask1_02.txt |
AC |
91 ms |
14836 KB |
subtask1_03.txt |
AC |
1 ms |
256 KB |
subtask1_04.txt |
AC |
1 ms |
256 KB |
subtask1_05.txt |
AC |
2 ms |
384 KB |
subtask1_06.txt |
AC |
2 ms |
384 KB |
subtask1_07.txt |
AC |
98 ms |
12020 KB |
subtask1_08.txt |
AC |
106 ms |
11896 KB |
subtask1_09.txt |
AC |
103 ms |
11892 KB |
subtask1_10.txt |
AC |
101 ms |
11892 KB |
subtask1_11.txt |
AC |
106 ms |
11892 KB |
subtask1_12.txt |
AC |
97 ms |
11892 KB |
subtask2_01.txt |
AC |
321 ms |
15476 KB |
subtask2_02.txt |
AC |
337 ms |
15476 KB |
subtask2_03.txt |
AC |
216 ms |
384 KB |
subtask2_04.txt |
AC |
227 ms |
512 KB |
subtask2_05.txt |
AC |
247 ms |
640 KB |
subtask2_06.txt |
AC |
247 ms |
768 KB |
subtask2_07.txt |
AC |
384 ms |
12276 KB |
subtask2_08.txt |
AC |
388 ms |
12280 KB |
subtask2_09.txt |
AC |
386 ms |
12276 KB |
subtask2_10.txt |
AC |
381 ms |
12276 KB |
subtask2_11.txt |
AC |
386 ms |
12276 KB |
subtask2_12.txt |
AC |
388 ms |
12276 KB |