# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1166878 | SmuggingSpun | Birthday gift (IZhO18_treearray) | C++20 | 16 ms | 328 KiB |
#include<bits/stdc++.h>
#define taskname "C"
using namespace std;
int n, m, q;
namespace sub1{
void solve(){
vector<vector<int>>g(n + 1);
for(int i = 1; i < n; i++){
int u, v;
cin >> u >> v;
g[u].emplace_back(v);
g[v].emplace_back(u);
}
vector<int>parent(n + 1), h(n + 1);
function<void(int)>dfs;
dfs = [&] (int s){
for(int& d : g[s]){
if(d != parent[s]){
h[d] = h[parent[d] = s] + 1;
dfs(d);
}
}
};
dfs(parent[1] = h[1] = 1);
auto lca = [&] (int u, int v){
while(u != v){
if(h[u] < h[v]){
swap(u, v);
}
u = parent[u];
}
return u;
};
vector<int>a(m + 1);
for(int i = 1; i <= m; i++){
cin >> a[i];
}
for(int _ = 0; _ < q; _++){
int _t;
cin >> _t;
if(_t == 1){
int p;
cin >> p >> a[p];
}
else{
int l, r, v;
cin >> l >> r >> v;
int L = -1, R = -1;
for(int i = l; i <= r && L == -1; i++){
int u = a[i];
for(int j = i; j <= r; j++){
if((u = lca(u, a[j])) == v){
L = i;
R = j;
break;
}
}
}
cout << L << " " << R << "\n";
}
}
}
}
int main(){
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
if(fopen(taskname".inp", "r")){
freopen(taskname".inp", "r", stdin);
}
cin >> n >> m >> q;
if(max({n, m, q}) <= 100){
sub1::solve();
}
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |