2023 江西省赛 【9.26训练补题】

Dashboard - 2023 (ICPC) Jiangxi Provincial Contest -- Official Contest - Codeforces

2023年江西省ICPC省赛部分题解_NIT最帅的博客-CSDN博客 

I. Tree

*考虑异或性质,一个数异或两次相当于不变

*快读

错解:建树更新深度

#include
using namespace std;
const int N=5e5+5;
typedef long long ll;
typedef unsigned long long ull;
typedef pair pi;
const ll mod=1e9+7;

int n,q,x,y,op,w;
int fa[N];
int v[N];
int d[N];
mapmp;
vectoredge[N];
void getd(int x,int de){
	d[x]=de;
	for(auto i:edge[x]){
		if(i!=fa[x]){
			fa[i]=x;
			v[i]=mp[{i,x}];
			getd(i,de+1);
		}
	}
}
void solve1(int x,int y,int w){
	if(x==y)return;
	if(d[x]>d[y]){
		v[x]^=w;
		solve1(fa[x],y,w);
	}
	else if(d[x]y)swap(x,y);
		edge[x].push_back(y);
		edge[y].push_back(x);
		//fa[y]=x,v[y]=w;
		mp[{x,y}]=w;
		mp[{y,x}]=w;
	}fa[1]=-1;
	getd(1,1);
	//for(int i=1;i<=n;i++)printf("i%d d%d\n",i,d[i]);
	while(q--){
		scanf("%d",&op);
		if(op==1){
			scanf("%d%d%d",&x,&y,&w);
			if(w==0)continue;
			solve1(x,y,w);
		}else{
			scanf("%d",&x);
			solve2(x);
		}
	}
	return 0;
}

 正解:直接记录每个点周围边的异或值,op1只改变x,y两个点

#include
using namespace std;
const int N=5e5+5;
typedef long long ll;
typedef unsigned long long ull;
typedef pair pi;
const int inf=1<<30;
const ll mod=1e9+7;
inline void read(int &x){
	int f=1;
	x=0;
	char ch=getchar();
	while(ch<'0'||'9'

你可能感兴趣的:(训练赛,算法)