QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#415844#8716. 树KIRITO1211#WA 806ms193412kbC++232.9kb2024-05-21 11:16:242024-05-21 11:16:24

Judging History

你现在查看的是最新测评结果

  • [2024-05-21 11:16:24]
  • 评测
  • 测评结果:WA
  • 用时:806ms
  • 内存:193412kb
  • [2024-05-21 11:16:24]
  • 提交

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'