题解:AT_abc396_d [ABC396D] Minimum XOR Path
题目传送门
题目简述
一个简单无向图有
主要思路
一道比较板的 dfs 题,由于 dfs 前要标记。
由于
AC Code
#include<set>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
typedef long double db;
const int INT_INF = 0x3f3f3f3f;
const ll LL_INF = 0x3f3f3f3f3f3f3f3f;
// ----------------------------
// ----------------------------
int n;
bool vis[20];
ll ans = LL_INF;
set<pair<int, ll> > st[11];
// ----------------------------
void dfs(int u, ll sum) {
if (u == n) {
ans = min(ans, sum);
return;
}
for (auto i : st[u]) {
if (!vis[i.first]) {
vis[i.first] = true;
dfs(i.first, sum ^ i.second);
vis[i.first] = false;
}
}
}
int main() {
int m, u, v; ll w; cin >> n >> m;
for (int _ = 1; _ <= m; _++) {
cin >> u >> v >> w;
st[u].insert(make_pair(v, w));
st[v].insert(make_pair(u, w));
}
// ----------------------------
vis[1] = true;
dfs(1, 0);
// ----------------------------
cout << ans;
return 0;
}