QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#165214 | #5410. 树特卡克林 | Lynkcat# | 0 | 1ms | 5752kb | C++20 | 4.2kb | 2023-09-05 16:42:16 | 2024-07-04 01:52:39 |
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)
{
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(fa,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';
for (int i=1;i<=n;i++)
if (ffa[i]!=i)
{
int fa=ffa[i];
// cout<<i<<" "<<son[fa]<<endl;
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&&0) BF();
else BF1();
}
signed main()
{
IOS;
cin.tie(0);
int T=1;
while (T--)
{
BellaKira();
}
}
详细
Subtask #1:
score: 0
Wrong Answer
Test #1:
score: 0
Wrong Answer
time: 1ms
memory: 5752kb
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 8 1 1 7 7
result:
wrong answer 4th numbers differ - expected: '1', found: '8'
Subtask #2:
score: 0
Skipped
Dependency #1:
0%
Subtask #3:
score: 0
Skipped
Dependency #2:
0%
Subtask #4:
score: 0
Runtime Error
Test #4:
score: 0
Runtime Error
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:
result:
Subtask #5:
score: 0
Runtime Error
Test #5:
score: 0
Runtime Error
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:
result:
Subtask #6:
score: 0
Skipped
Dependency #3:
0%
Subtask #7:
score: 0
Skipped
Dependency #1:
0%