QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#165206 | #5410. 树特卡克林 | Lynkcat# | 20 | 189ms | 16932kb | C++20 | 3.9kb | 2023-09-05 16:39:04 | 2024-07-04 01:52:38 |
Judging History
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)
{
mx[k]=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)
{
if (ffa[k]==k)
{
t.insert(mp(s[k],k));
return;
}
if (son[ffa[k]]==k)
{
jump(ffa[k]);
return;
}
// cout<<","<<siz[k]<<" "<<siz[son[ffa[k]]]<<endl;
if (!son[ffa[k]]||siz[k]>siz[son[ffa[k]]]||siz[k]==siz[son[ffa[k]]]&&mx[k]>mx[son[ffa[k]]])
{
int fa=ffa[k];
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(k,mx[k]);
// t.insert(mp(s[tp(k)],tp(k)));
jump(fa);
}
else
{
t.insert(mp(s[k],k));
}
}
void BF1()
{
for (int i=1;i<=n;i++) ffa[i]=i,rt[i]=i,s[i]=i,mx[i]=i,siz[i]=1,t.insert(mp(s[i],i));
for (int i=1;i<=m;i++)
{
int op;
cin>>op;
if (op==1)
{
int x,y;
cin>>x>>y;
ffa[y]=x;
rt[y]=rt[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;
cout<<(*t.find_by_order((k-1)%t.size())).fi<<'\n';
}
}
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: 5712kb
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: 7780kb
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: 7864kb
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: 189ms
memory: 16880kb
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: 156ms
memory: 14764kb
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: 119ms
memory: 16932kb
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%