QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#165237#5410. 树特卡克林Lynkcat#20 414ms17016kbC++204.3kb2023-09-05 16:54:152024-07-04 01:52:47

Judging History

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

  • [2024-07-04 01:52:47]
  • 评测
  • 测评结果:20
  • 用时:414ms
  • 内存:17016kb
  • [2023-09-05 16:54:15]
  • 提交

answer

#include<bits/stdc++.h>
#include<bits/extc++.h>
#define poly vector<int>
#define IOS ios::sync_with_stdio(false)
#define ll long long
#define mp make_pair
#define mt make_tuple
#define pa pair < int,int >
#define fi first
#define se second
#define inf 1e18
#define mod 998244353
#define sz(x) ((int)((x).size()))
#define int ll
#define N 100005
using namespace std;
using namespace __gnu_cxx;
using namespace __gnu_pbds;
int n,m;
int ffa[N],rt[N];
poly G[N];
int s[N],siz[N],son[N];
poly all;
int mx[N];
tree<pa, null_type, less<pa>, rb_tree_tag, tree_order_statistics_node_update> t;
void dfs(int k,int fa)
{
    ffa[k]=fa;
    rt[k]=rt[fa];
    for (auto u:G[k])
    {
        if (u==fa) continue;
        dfs(u,k);
    }
} 
void makert(int k)
{
    rt[k]=k;
    dfs(k,k);
}
void gt(int k,int fa)
{
    s[k]=k;
    siz[k]=1;son[k]=0;
    mx[k]=k;
    for (auto u:G[k])
    {
        if (u==fa) continue;
        // cout<<k<<"->"<<u<<endl;
        gt(u,k);
        siz[k]+=siz[u];
        if (siz[u]>siz[son[k]]||siz[u]==siz[son[k]]&&mx[u]>mx[son[k]]) son[k]=u;
    }
    mx[k]=max(mx[k],mx[son[k]]);
    for (auto u:G[k])
    {
        if (u==fa) continue;
        if (u!=son[k]) all.push_back(s[u]);
        else s[k]^=s[u];
    }
}
void BF()
{
    for (int i=1;i<=n;i++) rt[i]=i;
    for (int i=1;i<=m;i++)
    {
        int op;
        cin>>op;
        if (op==1)
        {
            int x,y;
            cin>>x>>y;
            G[y].push_back(x);
            G[x].push_back(y);
            makert(rt[x]);
        }
        else
        {
            int x,y;
            cin>>x>>y;
            if (ffa[x]==y) swap(x,y);
            G[x].erase(find(G[x].begin(),G[x].end(),y));
            G[y].erase(find(G[y].begin(),G[y].end(),x));
            makert(y);
        }
        int k;
        cin>>k;
        for (int j=1;j<=n;j++)
            if (rt[j]==j) gt(j,j),all.push_back(s[j]);
        sort(all.begin(),all.end());
        cout<<all[(k-1)%all.size()]<<'\n';
        poly().swap(all);
    }
}
inline int tp(int k)
{
    while (ffa[k]!=k)
    {
        if (son[ffa[k]]!=k) return k;
        k=ffa[k];
    }
    return k;
}
inline void updmx(int k,int x)
{
    int res=x;
    while (ffa[k]!=k)
    {
        res=max(res,k);
        mx[k]=res;
        if (son[ffa[k]]!=k) return;
        k=ffa[k];
    }
    return;
}
void jump(int k)
{
    // cout<<"jump to "<<k<<endl;
    if (ffa[k]==k) 
    {
        t.insert(mp(s[k],k));
        return;
    }
    if (son[ffa[k]]==k)
    {
        jump(ffa[k]);
        return;
    }
    int fa=ffa[k];
    if (!son[fa]||siz[k]>siz[son[fa]]||siz[k]==siz[son[fa]]&&mx[k]>mx[son[fa]])
    {
        t.erase(mp(s[tp(fa)],tp(fa)));
        if (son[fa])
        {
            s[tp(fa)]^=s[son[fa]];
            t.insert(mp(s[son[fa]],son[fa]));
        }
        son[fa]=k;
        s[tp(k)]^=s[k];
        updmx(fa,mx[k]);
        // t.insert(mp(s[tp(k)],tp(k)));
        jump(fa);
    }
    else
    {
        t.insert(mp(s[k],k));
        t.erase(mp(s[tp(fa)],tp(fa)));
        jump(fa);
    }
}
void BF1()
{
    mt19937_64 rnd(12312313123);
    for (int i=1;i<=n;i++) ffa[i]=i,s[i]=i,mx[i]=i,siz[i]=1,t.insert(mp(s[i],i));
    for (int ii=1;ii<=m;ii++)
    {
        int op=1;
        cin>>op;
        int x,y;
        if (op==1)
        {
            cin>>x>>y;
            // x=rnd()%(ii)+1;
            // y=ii+1;
            ffa[y]=x;
            int u=x;
            while (ffa[u]!=u) siz[u]+=siz[y],u=ffa[u];
            siz[u]+=siz[y];
            t.erase(mp(s[y],y));
            jump(y);
        }
        else
        {
            int x,y;
            return;
        }
        int k;
        cin>>k;
        // k=rnd()%1000+1;
        cout<<(*t.find_by_order((k-1)%t.size())).fi<<'\n';
        // for (int i=1;i<=n;i++)
        //     if (ffa[i]!=i)
        //     {
        //         int fa=ffa[i];
        //         cout<<ii<<" "<<i<<" "<<son[fa]<<endl;
        //         // cout<
        //         assert(siz[son[fa]]>siz[i]||siz[son[fa]]==siz[i]&&mx[son[fa]]>=mx[i]);
            // }
    }
}
void BellaKira()
{
    cin>>n>>m;
    if (n<=1000&&m<=5000) BF();
    else BF1();
}
signed main()
{
	IOS;
	cin.tie(0);
	int T=1;
	while (T--)
	{
		BellaKira();
	}
}

详细

Subtask #1:

score: 5
Accepted

Test #1:

score: 5
Accepted
time: 1ms
memory: 7784kb

input:

10 50
1 4 5 8
1 2 10 6
1 7 10 1
1 2 5 7
1 1 5 1
1 8 3 1
1 5 3 3
1 1 9 3
0 10 2 8
1 10 1 6
0 1 10 1
0 4 5 9
1 8 4 9
0 3 5 3
0 10 7 6
1 1 4 1
0 4 8 3
1 5 6 2
1 10 7 1
1 2 7 1
0 2 7 8
0 4 1 10
1 7 2 6
1 2 4 2
1 2 3 4
0 5 6 7
1 8 6 1
0 2 7 7
1 10 3 1
0 3 8 5
0 2 4 7
1 4 10 9
0 1 9 8
0 2 3 1
1 10 8 4
1 1...

output:

9
8
1
1
3
4
9
9
4
9
2
6
11
9
15
6
6
2
2
4
2
9
4
6
10
6
4
13
1
4
1
14
14
3
7
4
7
3
9
8
4
7
8
4
3
3
7
7
5
2

result:

ok 50 numbers

Subtask #2:

score: 5
Accepted

Dependency #1:

100%
Accepted

Test #2:

score: 5
Accepted
time: 2ms
memory: 5756kb

input:

100 500
1 38 34 84
1 71 2 8
1 22 1 89
1 70 2 7
1 100 15 69
1 97 86 77
1 84 39 47
1 21 43 73
1 100 1 64
1 69 99 42
1 19 8 25
1 29 70 91
1 38 1 45
1 92 63 5
1 54 83 94
1 5 12 41
1 73 91 90
1 100 32 10
1 43 38 2
1 73 96 65
1 67 94 26
1 21 31 65
1 22 37 42
1 85 37 12
1 3 46 84
1 69 88 28
1 92 82 87
1 54...

output:

85
8
92
7
74
81
51
79
68
47
28
4
52
7
10
49
9
14
4
77
30
77
50
16
9
36
13
14
30
13
4
10
52
7
34
41
63
60
29
14
62
78
74
40
42
27
51
24
6
24
66
33
27
40
48
76
24
13
14
112
40
33
44
41
47
68
80
33
49
112
76
99
45
65
90
22
51
30
33
59
65
22
50
22
50
63
67
51
58
50
45
3
75
41
74
64
1
7
51
10
42
22
76
49...

result:

ok 500 numbers

Subtask #3:

score: 10
Accepted

Dependency #2:

100%
Accepted

Test #3:

score: 10
Accepted
time: 150ms
memory: 5812kb

input:

1000 5000
1 481 556 393
1 197 951 694
1 844 89 877
1 996 276 422
1 936 284 893
1 606 205 37
1 908 355 156
1 580 338 612
1 889 574 90
1 835 998 105
1 795 673 814
1 286 226 514
1 393 557 950
1 548 913 346
1 714 779 585
1 509 140 1000
1 85 564 274
1 576 820 932
1 246 536 8
1 361 356 299
1 430 364 650
1...

output:

393
697
881
425
896
37
157
623
91
106
819
520
962
352
595
16
280
948
8
307
666
567
563
103
151
5
384
680
260
88
449
313
932
965
62
722
663
823
798
704
527
409
926
463
611
290
99
675
749
6
486
721
550
42
268
994
125
243
158
524
586
934
947
716
108
478
300
759
931
754
992
263
261
784
13
631
229
724
14...

result:

ok 5000 numbers

Subtask #4:

score: 0
Wrong Answer

Test #4:

score: 0
Wrong Answer
time: 414ms
memory: 15776kb

input:

100000 99999
1 1 2 44734
1 2 3 61340
1 1 4 68331
1 2 5 86313
1 4 6 26991
1 4 7 72397
1 3 8 24098
1 5 9 31437
1 5 10 82367
1 5 11 20958
1 11 12 38919
1 12 13 87596
1 2 14 41335
1 1 15 78828
1 14 16 73861
1 9 17 81368
1 1 18 40205
1 9 19 60737
1 4 20 9347
1 5 21 84645
1 18 22 20063
1 15 23 98769
1 15 ...

output:

44735
61342
68333
86315
26994
72400
24102
31442
82372
20963
38925
87603
41342
78835
73869
81377
40214
60746
9356
84654
20073
98780
78096
84936
68247
59462
13246
58069
42163
54594
13293
42645
26853
5004
97006
66947
80024
951
20786
52358
56517
76013
46338
9103
21979
20761
46128
72450
88242
9521
60767
...

result:

wrong answer 259th numbers differ - expected: '197', found: '188'

Subtask #5:

score: 0
Wrong Answer

Test #5:

score: 0
Wrong Answer
time: 189ms
memory: 17016kb

input:

100000 99999
1 2 1 30000
1 3 2 76304
1 4 1 35053
1 5 4 38046
1 6 4 43843
1 7 1 64206
1 8 6 52957
1 9 3 42768
1 10 8 6520
1 11 5 43975
1 12 1 64810
1 13 12 64219
1 14 10 78432
1 15 4 62142
1 16 15 235
1 17 3 77806
1 18 17 58130
1 19 5 47941
1 20 14 19568
1 21 7 99780
1 22 17 39362
1 23 4 10525
1 24 1...

output:

30001
76306
35055
38049
43846
64209
52961
42773
6526
43982
64817
64227
78441
62151
245
77816
58141
47952
19580
99793
39375
10538
60402
89303
59520
30008
47188
78768
8443
80435
45396
27686
37174
16359
59043
53959
89898
8331
14083
21921
75849
25514
25097
68677
86108
75487
75878
10222
80047
70403
21912...

result:

wrong answer 3rd numbers differ - expected: '35056', found: '35055'

Subtask #6:

score: 0
Wrong Answer

Dependency #3:

100%
Accepted

Test #6:

score: 0
Wrong Answer
time: 154ms
memory: 14432kb

input:

100000 500000
1 80697 84881 19262
1 95888 80521 10177
1 94305 51186 64430
1 98326 42972 48338
1 12913 26290 94592
1 72437 16368 33161
1 90564 19898 47803
1 72637 75741 79240
1 36415 11660 46397
1 96674 79314 69371
1 5150 54843 2612
1 33519 46498 64905
1 83708 94254 81506
1 51872 64932 91946
1 63852 ...

output:

19262
10177
64429
48337
94596
33161
47805
79242
46399
69373
2612
64909
81512
91956
23328
77077
51755
60147
21156
73862
37883
3541
75252
16667
79090
17015
8464
13951
30540
87627
56430
33759
99460
18806
34544
27730
23888
78785
60056
28296
65149
42767
64112
56512
52968
79488
32043
53322
73047
27093
288...

result:

wrong answer 610th numbers differ - expected: '95673', found: '95672'

Subtask #7:

score: 0
Skipped

Dependency #1:

100%
Accepted

Dependency #2:

100%
Accepted

Dependency #3:

100%
Accepted

Dependency #4:

0%