QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#370993#4909. 《关于因为与去年互测zjk撞题而不得不改题这回事》274551858515 1441ms336292kbC++203.3kb2024-03-29 20:45:412024-03-29 20:45:41

Judging History

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

  • [2024-03-29 20:45:41]
  • 评测
  • 测评结果:15
  • 用时:1441ms
  • 内存:336292kb
  • [2024-03-29 20:45:41]
  • 提交

answer

#include<cstdio>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std;
typedef long long ll;
const int N=1000001,M=31;
int n,m,tot,e[N];
ll b[N];
vector<int> a[N];
namespace ST
{
    int lg[N];
    ll a[N][M];
    int check(int x,int y)
    {
        return b[x]>b[y]?x:y;
    }
    void init()
    {
        for(int i=1;i<=n;++i) a[i][0]=e[i];
        for(int i=0;i<=20;++i)
        {
            for(int j=(1<<i);j<=min(1<<(i+1)-1,n);++j) lg[j]=i;
        }
        for(int i=1;i<=20;++i)
        {
            for(int j=1;j<=n;++j)
            {
                if(j+(1<<i)-1<=n) a[j][i]=check(a[j][i-1],a[j+(1<<(i-1))][i-1]);
            }
        }
    }
    int sum(int x,int y)
    {
        if(x>y) swap(x,y);
        return check(a[x][lg[y-x+1]],a[y-(1<<lg[y-x+1])+1][lg[y-x+1]]);
    }
}
struct tree
{
    int f,s,d,t,z,b;
}T[N];
struct str
{
    int x,y,t;
    str() {}
    str(int x,int y):x(x),y(y),t(ST::sum(T[x].b,T[y].b)) {}
    friend bool operator<(str x,str y)
    {
        return b[x.t]<b[y.t];
    }
};
priority_queue<str> Q1;
priority_queue<ll> Q2;
void dfs1(int x)
{
    T[x].s=1;
    T[x].d=T[T[x].f].d+1;
    for(auto i:a[x])
    {
        if(i==T[x].f) continue;
        T[i].f=x;
        dfs1(i);
        T[x].s+=T[i].s;
        if(T[i].s>T[T[x].z].s) T[x].z=i;
    }
}
void dfs2(int x,int t)
{
    T[x].b=++tot;
    T[x].t=t;
    if(T[x].z) dfs2(T[x].z,t);
    for(auto i:a[x])
    {
        if(i==T[x].f||i==T[x].z) continue;
        dfs2(i,i);
    }
}
void solve(int x,int y)
{
    while(T[x].t!=T[y].t)
    {
        if(T[T[x].t].d>T[T[y].t].d)
        {
            Q1.push(str(T[x].t,x));
            x=T[T[x].t].f;
        }
        else
        {
            Q1.push(str(T[y].t,y));
            y=T[T[y].t].f;
        }
    }
    Q1.push(str(x,y));
}
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n-1;++i)
    {
        int x,y;
        scanf("%d%d",&x,&y);
        a[x].push_back(y);
        a[y].push_back(x);
    }
    for(int i=1;i<=n;++i)
    {
        scanf("%lld",&b[i]);
    }
    dfs1(1);
    dfs2(1,1);
    for(int i=1;i<=n;++i) e[T[i].b]=i;
    ST::init();
    scanf("%d",&m);
    ll las=0;
    for(int i=1;i<=m;++i)
    {
        int x,y,k;
        scanf("%d%d%d",&x,&y,&k);
        x=(x^las)%n+1,y=(y^las)%n+1;
        while(!Q1.empty()) Q1.pop();
        while(!Q2.empty()) Q2.pop();
        solve(x,y);
        while(!Q1.empty()&&Q2.size()<k*62)
        {
            auto [x,y,t]=Q1.top();
            Q2.push(b[t]);
            Q1.pop();
            if(T[x].d>T[y].d) swap(x,y);
            if(T[x].d<T[t].d) Q1.push(str(x,T[t].f));
            if(T[t].d<T[y].d) Q1.push(str(T[t].z,y));
        }
        while(Q2.size()<k) Q2.push(0);
        ll s=0;
        for(int i=62;i>=0;--i)
        {
            static ll z[11];
            for(int j=1;j<=k;++j) z[j]=Q2.top(),Q2.pop();
            if((z[k]&(1ll<<i))!=0)
            {
                s|=(1ll<<i);
                for(int j=1;j<=k;++j) Q2.push(z[j]);
            }
            else
            {
                for(int j=1;j<=k;++j) Q2.push(z[j]&(~(1ll<<i)));
            }
        }
        printf("%lld\n",las=s);
    }
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Subtask #1:

score: 0
Wrong Answer

Test #1:

score: 0
Wrong Answer
time: 2ms
memory: 6352kb

input:

931
184 700
485 184
419 485
386 419
308 386
114 308
301 114
598 301
120 598
144 120
595 144
812 595
236 812
7 236
543 7
327 543
858 327
68 858
177 68
398 177
899 398
408 899
848 408
202 848
269 202
304 269
540 304
647 540
672 647
314 672
157 314
241 157
745 241
300 745
343 300
92 343
117 92
30 117
2...

output:

36028797018963968

result:

wrong answer 1st numbers differ - expected: '1152921504606846976', found: '36028797018963968'

Subtask #2:

score: 0
Skipped

Dependency #1:

0%

Subtask #3:

score: 0
Wrong Answer

Test #17:

score: 0
Wrong Answer
time: 44ms
memory: 46584kb

input:

99115
98506 98914
1961 98506
45808 1961
23027 45808
16655 23027
66393 16655
77250 66393
68284 77250
53684 68284
21189 53684
84955 21189
73464 84955
47574 73464
40651 47574
21101 40651
6589 21101
59680 6589
6185 59680
25529 6185
207 25529
33286 207
98459 33286
92565 98459
85446 92565
97388 85446
1630...

output:

4

result:

wrong answer 1st numbers differ - expected: '2050', found: '4'

Subtask #4:

score: 0
Skipped

Dependency #1:

0%

Subtask #5:

score: 0
Skipped

Dependency #1:

0%

Subtask #6:

score: 0
Skipped

Dependency #5:

0%

Subtask #7:

score: 15
Accepted

Test #45:

score: 15
Accepted
time: 1418ms
memory: 335960kb

input:

996678
2 1
3 1
4 1
5 1
6 3
7 5
8 5
9 5
10 7
11 8
12 9
13 1
14 2
15 7
16 4
17 5
18 17
19 16
20 2
21 1
22 1
23 9
24 17
25 19
26 10
27 9
28 7
29 25
30 25
31 4
32 11
33 31
34 21
35 13
36 19
37 25
38 10
39 11
40 20
41 35
42 1
43 19
44 20
45 41
46 1
47 19
48 5
49 28
50 21
51 33
52 7
53 14
54 21
55 20
56 1...

output:

4
0
4
0
0
0
0
0
0
0
0
0
0
0
0
0
2
0
8
0
0
0
0
16
0
0
4096
0
0
0
0
4096
0
0
0
0
2
0
0
0
0
4
0
0
0
0
32
64
0
0
0
512
64
4
4096
0
2
0
0
131072
0
0
0
0
0
0
0
0
2
0
0
0
2
0
4096
2
0
0
0
0
0
512
2
8
0
0
4096
64
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
512
0
0
36
0
0
0
0
0
0
0
64
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0...

result:

ok 99210 numbers

Test #46:

score: 0
Accepted
time: 1441ms
memory: 334580kb

input:

992539
2 1
3 1
4 3
5 2
6 3
7 1
8 1
9 4
10 7
11 1
12 5
13 5
14 4
15 7
16 7
17 9
18 12
19 5
20 15
21 1
22 13
23 6
24 4
25 7
26 21
27 23
28 11
29 7
30 23
31 16
32 4
33 25
34 12
35 27
36 34
37 1
38 3
39 1
40 4
41 16
42 4
43 19
44 1
45 29
46 5
47 15
48 13
49 1
50 26
51 46
52 8
53 9
54 1
55 47
56 26
57 31...

output:

0
0
4096
2
0
0
8
0
0
16
0
0
0
0
0
128
0
532
2
640
0
16384
514
0
0
0
0
0
0
0
0
0
0
0
0
2
0
0
2
0
0
2
0
128
0
0
0
2
0
0
2
0
128
0
0
0
0
132
2
0
0
0
0
128
0
4
0
0
0
0
0
16
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
32
0
0
0
0
0
0
0
0
128
0
256
0
0
0
0
0
0
0
0
16
2
0
2
0
0
0
264
0
0
0
0
0
0
0
0
0
2
0
0
4
5...

result:

ok 99668 numbers

Test #47:

score: 0
Accepted
time: 1404ms
memory: 334344kb

input:

991690
2 1
3 1
4 1
5 1
6 1
7 4
8 1
9 3
10 4
11 5
12 1
13 5
14 9
15 8
16 1
17 10
18 12
19 7
20 9
21 14
22 2
23 12
24 14
25 1
26 9
27 11
28 19
29 7
30 28
31 16
32 28
33 17
34 12
35 27
36 7
37 17
38 1
39 25
40 4
41 29
42 33
43 31
44 18
45 11
46 27
47 29
48 2
49 45
50 7
51 15
52 46
53 11
54 51
55 6
56 1...

output:

0
0
0
0
2
0
0
0
2
0
0
0
0
0
0
0
0
1024
0
0
0
256
0
2
0
0
131104
0
0
131104
2
0
1024
0
0
0
258
0
0
16388
0
0
0
256
0
0
0
0
2
2
0
32
0
0
0
16384
0
0
32
4
0
0
2
0
0
0
2
0
0
1026
8
0
8
4
0
4
2
0
0
0
0
0
1024
0
2
0
36
0
2
0
4
0
32
0
2
2
0
8192
0
0
0
0
0
0
0
4098
0
0
0
0
0
32
4098
1024
0
2
2
0
0
0
4
4096
...

result:

ok 99396 numbers

Test #48:

score: 0
Accepted
time: 1415ms
memory: 336292kb

input:

997182
2 1
3 1
4 2
5 1
6 5
7 1
8 2
9 5
10 1
11 6
12 3
13 5
14 3
15 11
16 1
17 9
18 2
19 1
20 7
21 5
22 2
23 15
24 13
25 21
26 1
27 2
28 3
29 19
30 20
31 4
32 19
33 16
34 23
35 13
36 13
37 14
38 33
39 13
40 25
41 15
42 32
43 34
44 40
45 13
46 41
47 46
48 32
49 29
50 39
51 2
52 16
53 41
54 3
55 7
56 1...

output:

0
0
0
0
0
0
4
0
4096
1024
0
4
0
16
64
8
0
0
0
0
1024
0
0
0
0
256
0
0
0
0
8192
0
0
1028
0
4
4
0
0
0
0
0
0
0
1024
0
0
0
16
0
0
2
0
0
0
0
0
0
0
4
0
64
4
0
524288
0
0
0
36
0
0
0
0
0
0
0
0
0
0
0
4096
1024
0
0
0
0
0
2
0
0
8
0
16
0
0
0
96
64
64
0
0
0
2
64
0
0
66
0
2
0
4096
0
0
0
2
64
0
0
0
0
2
0
0
256
0
0
...

result:

ok 99733 numbers

Subtask #8:

score: 0
Skipped

Dependency #1:

0%