求聚聚纠错
查看原帖
求聚聚纠错
472950
封禁用户楼主2022/5/29 11:29
#include<bits/stdc++.h>
#define F(_i,_j,_k) for(int _i=_j;_i<=_k;_i++)
#define M 32768
using namespace std;

int n,d[100005],dp[M],nd,ans;
bool res[16];

int dfs(int i){
//	cout<<i<<endl;
	if(dp[i]!=0x3f3f3f3f)return dp[i];
	if(i==0)return dp[0]=0;
	F(j,0,14){
		if((i>>j)%2==0)continue;
		F(k,0,14){
			if((i>>k)%2==0||j==k)continue;
			int num=(j+1)^(k+1)-1,ret=i^(1<<j)^(1<<k)^(1<<num);
			dp[i]=min(dp[i],dfs(ret)+((ret>>num)%2==0));
		}
	}
	return dp[i]=dp[i]+1;
}

int main(){
	cin>>n;
	F(o,1,n-1){
		int x,y,a;
		cin>>x>>y>>a;
		d[x]^=a;d[y]^=a;
	}/*
	F(i,0,n-1){
		cout<<d[i]<<' ';
	}
	cout<<endl;*/
	F(i,0,n-1){
		if(d[i]==0)continue;
		int rnd=nd;
		nd^=(1<<d[i]-1);
		if(nd<rnd)ans++;
	}
	memset(dp,0x3f,sizeof(dp));
	ans+=dfs(nd);
	cout<<ans<<endl;
	return 0;
}
2022/5/29 11:29
加载中...