#include "bits/stdc++.h"
using namespace std;
#define ar array
typedef long long ll;
#define int ll
const int N = 1e6 + 5;
vector<int> G[2][N];
int tin[2][N], tout[2][N], par[2][N][20];
int d[2][N];
signed main(){
ios::sync_with_stdio(0); cin.tie(0);
int n, k, q, T; cin >> n >> k >> q >> T;
int R[2] {};
for(int i=1;i<=n;i++){
int p; cin >> p;
if(~p){
G[0][p].push_back(i);
} else {
R[0] = i;
}
}
for(int i=1;i<=n;i++){
int p; cin >> p;
if(~p){
G[1][p].push_back(i);
} else {
R[1] = i;
}
}
for(int c=0;c<2;c++){
int t = 0;
tout[c][0] = N;
function<void(int)> dfs = [&](int u){
tin[c][u] = ++t;
for(int j=1;j<20;j++){
par[c][u][j] = par[c][par[c][u][j-1]][j-1];
}
for(auto x : G[c][u]){
par[c][x][0] = u;
dfs(x);
}
tout[c][u] = t;
};
dfs(R[c]);
}
vector<int> p;
function<void(int)> dfs = [&](int u){
if(tin[0][u] <= k){
p.push_back(u);
}
for(auto x : G[0][u]){
dfs(x);
}
};
dfs(R[0]);
for(auto x : p){
cout<<x<<" ";
} cout<<endl;
auto is = [&](int t, int a, int b){
return (tin[t][a] <= tin[t][b] && tin[t][b] <= tout[t][a]);
};
auto Lca = [&](int t, int a, int b){
if(is(t, a, b)) return a;
if(is(t, b, a)) return b;
for(int j=19;~j;j--){
if(!is(t, par[t][a][j], b)) a = par[t][a][j];
}
return par[t][a][0];
};
sort(p.begin(), p.end(), [&](int a, int b){
return tin[1][a] < tin[1][b];
});
for(int i=1;i<k;i++){
cout<<"? "<<p[i-1]<<" "<<p[i]<<endl;
}
cout<<"! "<<endl;
for(int i=1;i<k;i++){
int dc, dd, da, db; cin >> dc >> dd >> da >> db;
int lca = Lca(1, p[i-1], p[i]);
d[1][lca] = d[1][p[i-1]] - da;
d[1][p[i]] = d[1][lca] + db;
d[0][p[i]] = d[0][p[i-1]] - dc + dd;
}
vector<ar<int, 2>> Q;
for(int i=0;i<T;i++){
int a, b; cin >> a >> b;
Q.push_back({a, b});
}
for(auto [a, b] : Q){
for(int c=0;c<2;c++){
int lca = Lca(c, a, b);
cout<<d[c][a] + d[c][b] - d[c][lca] * 2<<" ";
}
cout<<endl;
}
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1608 ms |
300520 KB |
Output is correct |
2 |
Correct |
1918 ms |
300724 KB |
Output is correct |
3 |
Correct |
1116 ms |
248872 KB |
Output is correct |
4 |
Correct |
1234 ms |
248796 KB |
Output is correct |
5 |
Correct |
1074 ms |
249052 KB |
Output is correct |
6 |
Correct |
1595 ms |
258880 KB |
Output is correct |
7 |
Correct |
1579 ms |
258764 KB |
Output is correct |
8 |
Correct |
1575 ms |
258804 KB |
Output is correct |
9 |
Correct |
1057 ms |
248844 KB |
Output is correct |
10 |
Correct |
1060 ms |
248944 KB |
Output is correct |
11 |
Correct |
1078 ms |
248624 KB |
Output is correct |
12 |
Correct |
1076 ms |
248932 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1628 ms |
300748 KB |
Output is correct |
2 |
Correct |
1602 ms |
300296 KB |
Output is correct |
3 |
Correct |
1076 ms |
248800 KB |
Output is correct |
4 |
Correct |
1144 ms |
249084 KB |
Output is correct |
5 |
Correct |
1108 ms |
248956 KB |
Output is correct |
6 |
Correct |
1574 ms |
258616 KB |
Output is correct |
7 |
Correct |
1635 ms |
258852 KB |
Output is correct |
8 |
Correct |
1701 ms |
259004 KB |
Output is correct |
9 |
Correct |
1659 ms |
257732 KB |
Output is correct |
10 |
Correct |
1404 ms |
257572 KB |
Output is correct |
11 |
Correct |
1357 ms |
257360 KB |
Output is correct |
12 |
Correct |
1414 ms |
257592 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1413 ms |
292656 KB |
Output is correct |
2 |
Correct |
1383 ms |
292572 KB |
Output is correct |
3 |
Correct |
833 ms |
241372 KB |
Output is correct |
4 |
Correct |
822 ms |
241424 KB |
Output is correct |
5 |
Correct |
844 ms |
241268 KB |
Output is correct |
6 |
Correct |
1125 ms |
251236 KB |
Output is correct |
7 |
Correct |
1076 ms |
251384 KB |
Output is correct |
8 |
Correct |
1082 ms |
251472 KB |
Output is correct |
9 |
Correct |
964 ms |
250028 KB |
Output is correct |
10 |
Correct |
992 ms |
249880 KB |
Output is correct |
11 |
Correct |
934 ms |
249852 KB |
Output is correct |
12 |
Correct |
992 ms |
249784 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
3104 ms |
541000 KB |
Output is correct |
2 |
Correct |
2960 ms |
541276 KB |
Output is correct |
3 |
Correct |
1876 ms |
438940 KB |
Output is correct |
4 |
Correct |
1863 ms |
438840 KB |
Output is correct |
5 |
Correct |
1855 ms |
438880 KB |
Output is correct |
6 |
Correct |
2999 ms |
459056 KB |
Output is correct |
7 |
Correct |
2595 ms |
459184 KB |
Output is correct |
8 |
Correct |
2622 ms |
459000 KB |
Output is correct |
9 |
Correct |
2194 ms |
456264 KB |
Output is correct |
10 |
Correct |
2286 ms |
456260 KB |
Output is correct |
11 |
Correct |
2311 ms |
455988 KB |
Output is correct |
12 |
Correct |
2227 ms |
456216 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
3145 ms |
551104 KB |
Output is correct |
2 |
Correct |
3180 ms |
551112 KB |
Output is correct |
3 |
Correct |
1993 ms |
447548 KB |
Output is correct |
4 |
Correct |
2462 ms |
447764 KB |
Output is correct |
5 |
Correct |
1948 ms |
447352 KB |
Output is correct |
6 |
Correct |
3021 ms |
467672 KB |
Output is correct |
7 |
Correct |
2872 ms |
467276 KB |
Output is correct |
8 |
Correct |
3002 ms |
467568 KB |
Output is correct |
9 |
Correct |
2591 ms |
464644 KB |
Output is correct |
10 |
Correct |
2549 ms |
464512 KB |
Output is correct |
11 |
Correct |
2511 ms |
464576 KB |
Output is correct |
12 |
Correct |
2641 ms |
464708 KB |
Output is correct |