题解:AT_abc396_d [ABC396D] Minimum XOR Path
题面
题目描述
给定一个简单的连通无向图,其中
在从顶点
对于非负整数
- 在
A \oplus B 的二进制表示中,2^k \,(k \ge 0) 对应位置上的数字是1 ,当且仅当A 和B 的同一位置上的数字之一恰好是1 ;否则为0 。
例如,
一般来说,
数据范围
-
2 \leq N \leq 10 -
N-1 \leq M \leq \frac{N(N-1)}{2} -
1 \leq u_i < v_i \leq N -
0 \leq w_i < 2^{60} -
给定图是一个简单连通无向图。
-
所有输入值均为整数。
思路
首先我们注意到
注意:数据范围比较大所以需要开 long long。
Code
#include <bits/stdc++.h>
using namespace std;
const int N=1e6+5;
#define int long long
vector<pair<int,int>> g[N];
int n,m,vis[N],ans=9e18;
void dfs(int u,int c){
if(u==n){
ans=min(ans,c);
}
for(auto [v,w]:g[u]){
if(vis[v]){
continue;
}
vis[v]=1;
dfs(v,c^w);
vis[v]=0;
}
}
signed main(){
cin>>n>>m;
for(int i=1;i<=m;i++){
int u,v,w;
cin>>u>>v>>w;
g[u].push_back({v,w});//记录路径
g[v].push_back({u,w});
}
vis[1]=1;
dfs(1,0);
cout<<ans;
return 0;
}