QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#415844 | #8716. 树 | KIRITO1211# | WA | 806ms | 193412kb | C++23 | 2.9kb | 2024-05-21 11:16:24 | 2024-05-21 11:16:24 |
Judging History
answer
// LUOGU_RID: 154919549
//#pragma GCC optimize(3,"Ofast","inline")
#include <bits/stdc++.h>
#define int long long
using ll = long long;
const int M = 5e3 + 3;
//#define int long long
//int a[M];
//long long s[M],f1[M][M * 2],g[M][M * 2];
using namespace std;
const int mod = 1e9 + 7;
//int a[200050];
void solve() {
int n,m,q;std::cin>>n>>m>>q;
std::vector<std::vector<int> > e(n + 2), f(n + 2,std::vector<int>(102));
std::vector<int> dep(2 + n);
for(int i = 1;i < n;i++){
int u,v;std::cin>>u>>v;
e[u].push_back(v);
e[v].push_back(u);
}
std::vector<int> b(m + 3);
for(int i = 1;i <= m;i++){
std::cin>>b[i];
}
auto prdfs = [&](auto &&prdfs, int x, int fa) -> void{
f[x][0] = fa;
dep[x] = dep[fa] + 1;
for(int i = 1;i < 31;i ++){
f[x][i] = f[f[x][i - 1]][i - 1];
}
for(auto i : e[x]) {
if(i == fa)continue;
prdfs(prdfs, i, x);
}
};
auto lca = [&](int u, int v) -> int{
if(dep[u] < dep[v]) std::swap(u,v);
int dis = dep[u] - dep[v];
int jp = 0;
while(dis && jp <= 30){
if(dis % 2)u = f[u][jp];
dis >>= 1, jp++;
}
//std::cout<<dep[u]<<" "<<dep[v]<<" ";
if(u == v) return u;
for(int i = 30;i >= 0 && u != v;i--){
if(f[u][i] != f[v][i]) u = f[u][i], v = f[v][i];
}
return f[u][0];
};
auto dis = [&](int u, int v) -> int{
return dep[u] + dep[v] - 2 * dep[lca(u,v)];
};
prdfs(prdfs,b[1],0);
//std::cout<<q<<" ";
int ans = m;
std::vector<int> tag(m + 3);
for(int i = 2;i < m;i++){
if(dis(b[i],b[i + 1]) + dis(b[i - 1],b[i]) == dis(b[i - 1],b[i + 1])){
tag[i] = 1;
ans--;
}
}
//for(int i = 1;i <= m;i++){
//std::cout<<tag[i]<<" ";
//}
for(int j = 1;j <= q;j++){
int i,x;std::cin>>i>>x;
if(tag[i])ans++,tag[i] = 0;
if(i + 2 <= m)if(tag[i + 1])ans++,tag[i + 1] = 0;
if(i - 2 >= 1)if(tag[i - 1])ans++,tag[i - 1] = 0;
//if(tag[i - 1])ans++,tag[i - 1] = 0;
b[i] = x;
if(dis(b[i],b[i + 1]) + dis(b[i - 1],b[i]) == dis(b[i - 1],b[i + 1])){
tag[i] = 1;
ans--;
}
if(i + 2 <= m)
if(dis(b[i],b[i + 1]) + dis(b[i + 1],b[i + 2]) == dis(b[i + 2],b[i])){
tag[i + 1] = 1;
ans--;
}
if(i - 2 >= 1)
if(dis(b[i],b[i - 1]) + dis(b[i - 1],b[i - 2]) == dis(b[i - 2],b[i])){
tag[i - 1] = 1;
ans--;
}
std::cout<<ans<<'\n';
}
}
signed main() {
//io::init();
std::ios::sync_with_stdio(false);
std::cin.tie(0);
int t = 1;
// std::cin >> t;
// init();
while (t--) {
solve();
// std::cout.flush();
}
// std::cout<<5 * inv(2ll) % mod<<'\n';
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 0ms
memory: 3452kb
input:
5 5 3 2 1 3 2 1 4 5 1 1 5 4 2 3 1 3 5 3 3 3
output:
4 4 5
result:
ok 3 number(s): "4 4 5"
Test #2:
score: 0
Accepted
time: 1ms
memory: 3572kb
input:
30 200 200 10 24 10 13 10 26 13 29 27 26 17 24 27 21 17 15 13 5 13 30 27 3 18 21 9 21 2 24 10 4 11 5 2 8 10 23 1 18 21 25 4 20 12 23 22 27 28 27 18 7 13 6 14 30 10 19 16 21 14 29 25 30 1 17 22 21 11 19 21 30 13 1 22 10 14 7 29 7 15 21 25 29 25 7 29 7 1 23 3 17 2 7 4 27 18 26 3 6 5 3 16 26 20 19 16 2...
output:
174 175 175 175 175 175 175 175 175 175 176 176 176 176 176 176 175 175 175 175 174 173 173 173 173 173 173 174 174 174 174 173 173 174 174 174 174 174 174 174 174 174 173 173 173 174 173 173 174 173 174 174 174 174 174 174 174 174 174 174 174 175 174 174 174 174 174 175 175 177 177 177 177 177 176 ...
result:
ok 200 numbers
Test #3:
score: 0
Accepted
time: 206ms
memory: 7312kb
input:
1000 200000 200000 142 266 266 877 877 673 673 473 923 473 923 55 55 288 679 288 85 679 85 460 296 460 793 296 262 793 40 262 40 680 647 680 999 647 56 999 550 56 550 774 774 939 939 423 423 168 168 554 554 93 329 93 329 474 221 474 890 221 890 304 752 304 345 752 345 269 290 269 290 781 781 264 859...
output:
133598 133598 133598 133598 133598 133598 133596 133598 133598 133598 133598 133598 133598 133598 133598 133598 133598 133598 133598 133596 133596 133596 133596 133598 133598 133598 133598 133598 133598 133598 133598 133598 133598 133598 133598 133598 133598 133598 133596 133596 133596 133596 133596...
result:
ok 200000 numbers
Test #4:
score: 0
Accepted
time: 88ms
memory: 7004kb
input:
1000 200000 200000 911 577 911 775 845 911 911 780 911 585 786 911 725 911 960 911 911 645 949 911 46 911 911 429 714 911 911 703 999 911 911 194 166 911 984 911 911 262 902 911 911 201 680 911 637 911 911 923 697 911 911 534 911 38 911 743 911 762 911 342 911 983 911 758 911 716 48 911 27 911 491 9...
output:
199810 199810 199810 199810 199810 199810 199810 199810 199810 199810 199810 199810 199810 199810 199810 199810 199810 199810 199810 199810 199810 199810 199810 199810 199810 199810 199810 199810 199810 199810 199810 199810 199810 199810 199810 199810 199810 199810 199810 199810 199810 199810 199810...
result:
ok 200000 numbers
Test #5:
score: 0
Accepted
time: 200ms
memory: 7024kb
input:
1000 200000 200000 481 469 250 469 751 469 932 751 469 496 779 932 932 277 154 481 836 932 313 496 157 250 723 277 496 625 824 723 252 496 932 50 836 349 313 348 580 252 277 381 183 932 648 252 824 81 250 310 338 154 481 441 932 772 779 534 310 972 513 836 98 534 678 183 902 469 349 370 380 348 751 ...
output:
193586 193586 193586 193585 193586 193586 193586 193586 193586 193586 193586 193586 193586 193586 193586 193587 193588 193588 193588 193588 193588 193588 193588 193588 193587 193588 193588 193589 193589 193589 193589 193589 193589 193590 193590 193590 193590 193590 193590 193590 193590 193590 193590...
result:
ok 200000 numbers
Test #6:
score: 0
Accepted
time: 169ms
memory: 6960kb
input:
1000 200000 200000 135 730 730 138 545 135 179 730 170 135 282 545 282 852 852 664 61 664 243 664 852 68 838 135 68 822 282 370 698 135 179 304 170 225 496 664 179 234 545 397 950 397 698 550 304 987 730 605 671 698 730 458 550 318 170 754 243 468 159 671 852 414 159 928 61 443 664 705 234 75 170 47...
output:
197896 197896 197896 197896 197896 197896 197896 197896 197896 197896 197896 197896 197896 197896 197896 197896 197896 197896 197896 197896 197896 197896 197896 197896 197896 197896 197896 197896 197896 197897 197897 197897 197897 197897 197897 197897 197897 197897 197897 197897 197897 197897 197897...
result:
ok 200000 numbers
Test #7:
score: -100
Wrong Answer
time: 806ms
memory: 193412kb
input:
200000 200000 200000 14041 108064 14041 6424 164394 6424 118940 164394 118940 153965 71525 153965 71525 23275 23275 136661 136661 78274 75990 78274 75990 39081 163771 39081 163771 159683 159683 104966 104966 15146 15146 85180 181282 85180 181282 44830 44830 86055 86055 164641 18858 164641 18858 1800...
output:
133599 133599 133599 133599 133599 133599 133599 133597 133597 133597 133595 133595 133593 133595 133595 133595 133595 133595 133595 133595 133595 133595 133595 133595 133595 133595 133595 133595 133595 133595 133595 133595 133595 133593 133593 133593 133593 133591 133591 133591 133591 133591 133591...
result:
wrong answer 23755th numbers differ - expected: '133555', found: '133554'