专栏文章

题解:AT_abc396_d [ABC396D] Minimum XOR Path

AT_abc396_d题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mipxjdmo
此快照首次捕获于
2025/12/03 19:34
3 个月前
此快照最后确认于
2025/12/03 19:34
3 个月前
查看原文

思路:

这一题不是很难,我们只要按着题意模拟就行了。
首先,我们用 dfs 求出求出所有 11NN 的所有简单路径,同时记录一下异或值,到达 NN 号点就将其与原答案取一个最小值就行了。
注意 ansans 初始时要设为 2×10182 \times 10^{18},设为 101810^{18} 时会 WA 两个点。

代码:

CPP
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,ans=2e18;
bool f[15];
vector<pair<int,int> >e[15];
void dfs(int x,int sum){
	if(x==n){
		ans=min(ans,sum);
		return;
	}
	for(auto[a,b]:e[x]){
		if(f[a]) continue;
		f[a]=1;
		dfs(a,sum^b);
		f[a]=0;
	}
}
signed main(){
	//freopen(".in","r",stdin);
	//freopen(".out","w",stdout);
	ios::sync_with_stdio(0);
	cin.tie(0),cout.tie(0);
	cin>>n>>m;
	for(int i=1;i<=m;++i){
		int u,v,w;cin>>u>>v>>w;
		e[u].push_back({v,w});
		e[v].push_back({u,w});
	}
	f[1]=1;
	dfs(1,0);
	cout<<ans;
	return 0;
}

评论

0 条评论,欢迎与作者交流。

正在加载评论...