社区讨论
我的代码过不了样例一却可以AC
P6086【模板】Prüfer(Prufer) 序列参与者 2已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @lxu8wsz8
- 此快照首次捕获于
- 2024/06/25 18:10 2 年前
- 此快照最后确认于
- 2024/06/25 21:21 2 年前
RT
CPP#include<bits/stdc++.h>
#define int long long
using namespace std;
int m,n;
const int N=1e5+10;
int f[N],d[N],p[N];
void tree2prufer() {
for(int i=1;i<n;i++) {
cin>>f[i];
d[f[i]]++;
}
for(int i=1,j=1;i<=n-2;j++) {
while(d[j])j++;
p[i++]=f[j];
while(i<=n-2&&--d[p[i-1]]==0&&p[i-1]<j)p[i++]=f[p[i-1]];
}
int ans=0;
for(int i=1;i<=n-2;i++)ans^=i*p[i];
cout<<ans<<endl;
return;
}
void prufer2tree() {
for(int i=1;i<=n-2;i++) {
cin>>p[i];
d[p[i]]++;
}
p[n-1]=n;
for(int i=1,j=1;i<n;i++,j++) {
while(d[j])j++;
f[j]=p[i];
while(i<n-1&&--d[p[i]]==0&&p[i]<j)f[p[i]]=p[i+1],i++;
}
int ans=0;
for(int i=1;i<n;i++)ans^=i*f[i];
cout<<ans<<endl;
return;
}
signed main() {
cin>>n>>m;
if(m==1)tree2prufer();
else prufer2tree();
return 0;
}
who know why?
回复
共 2 条回复,欢迎继续交流。
正在加载回复...