萌新刚学prufer序列,求改模板代码
  • 板块学术版
  • 楼主VectorChange
  • 当前回复1
  • 已保存回复1
  • 发布时间2021/10/15 12:12
  • 上次更新2023/11/4 03:46:41
查看原帖
萌新刚学prufer序列,求改模板代码
470194
VectorChange楼主2021/10/15 12:12

模板题传送门

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=6e6;
ll n,op,f[N],p[N],d[N],ans;
int main() {
	scanf("%lld%lld",&n,&op);
	if(op==1) {
		for (ll i=1; i<n; ++i) {
			scanf("%lld",&f[i]);
			++d[f[i]];
		}
		for (ll i=1,j=1; i<=n-2;++i,++j) {
			while (d[j]) ++j;
			p[i]=f[j];
			while (i<=n-2&&!(--d[p[i]])&&p[i]<j) 
				p[i+1]=f[p[i++]];
		}
		for (ll i=1;i<=n-2;i++) ans^=i*p[i];
	} else {
		for (ll i=1; i<=n-2; i++) {
			scanf("%lld",&p[i]);
			++d[p[i]];
		}
		p[n-1]=n;
		for (ll i=1,j=1; i<n; i++,j++) {
			while (d[j]) ++j;
			f[j]=p[i];
			while (i<n&&!(--d[p[i]])&&p[i]<j)
				f[p[i]]=p[++i];
		}
		for (ll i=1;i<n;i++) ans^=i*f[i];
	}
	printf("%lld",ans);
	return 0;
}

8WA+2RE,样例没有问题。

2021/10/15 12:12
加载中...