QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#165263#5410. 树特卡克林Lynkcat#30 484ms16892kbC++204.7kb2023-09-05 17:04:232024-07-04 01:52:47

Judging History

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

  • [2024-07-04 01:52:47]
  • 评测
  • 测评结果:30
  • 用时:484ms
  • 内存:16892kb
  • [2023-09-05 17:04:23]
  • 提交

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];
    }
    res=max(res,k);
    mx[k]=res;
    return;
}
inline void upds(int k,int x)
{
    int res=x;
    while (ffa[k]!=k)
    {
        res^=k;
        s[k]=res;
        if (son[ffa[k]]!=k) return;
        k=ffa[k];
    }
    res^=k;
    s[k]=res;
    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])
        {
            t.insert(mp(s[son[fa]],son[fa]));
        }
        son[fa]=k;
        updmx(fa,mx[k]);
        upds(fa,s[k]);
        jump(tp(fa));
    }
    else
    {
        t.insert(mp(s[k],k));
        t.erase(mp(s[tp(fa)],tp(fa)));
        jump(tp(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)
        {
            x=rnd()%(ii)+1;
            y=ii+1;
            cin>>x>>y;
            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;
        k=rnd()%1000+1;
        cin>>k;
        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];
        //         assert(siz[son[fa]]>siz[i]||siz[son[fa]]==siz[i]&&mx[son[fa]]>=mx[i]);
        //     }
        // for (int i=1;i<=n;i++)
            // if (tp(i)==i)
            // {
            //     int o=i;
            //     int sm=i;
            //     while (son[o]) o=son[o],sm^=o;
            //     assert(sm==s[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();
	}
}

Details

Tip: Click on the bar to expand more detailed information

Subtask #1:

score: 5
Accepted

Test #1:

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

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: 0ms
memory: 7808kb

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: 203ms
memory: 7876kb

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: 10
Accepted

Test #4:

score: 10
Accepted
time: 484ms
memory: 16892kb

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:

ok 99999 numbers

Subtask #5:

score: 0
Wrong Answer

Test #5:

score: 0
Wrong Answer
time: 31ms
memory: 3604kb

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:

0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
...

result:

wrong answer 1st numbers differ - expected: '30001', found: '0'

Subtask #6:

score: 0
Wrong Answer

Dependency #3:

100%
Accepted

Test #6:

score: 0
Wrong Answer
time: 35ms
memory: 3728kb

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:

0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
...

result:

wrong answer 1st numbers differ - expected: '19262', found: '0'

Subtask #7:

score: 0
Skipped

Dependency #1:

100%
Accepted

Dependency #2:

100%
Accepted

Dependency #3:

100%
Accepted

Dependency #4:

100%
Accepted

Dependency #5:

0%