社区讨论
代码厌氧
P4151[WC2011] 最大XOR和路径参与者 4已保存回复 4
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 4 条
- 当前快照
- 1 份
- 快照标识符
- @lqhjw9hc
- 此快照首次捕获于
- 2023/12/23 12:18 2 年前
- 此快照最后确认于
- 2023/12/23 15:16 2 年前
开 O2 TLE ,不开 AC
CPP#include<bits/stdc++.h>
using namespace std;
#define LL long long
const int N = 50010, M = 2e5 + 10;
int n, m;
LL ans;
vector<LL> a;
int h[N], ne[M], e[M], idx;
LL w[M];
void add(int a, int b, LL c)
{
e[++idx] = b, w[idx] = c, ne[idx] = h[a], h[a] = idx;
}
bool vis[N];
LL s[N];
bool dfs(int x)
{
vis[x] = 1;
for(int i = h[x]; i; i = ne[i])
{
int j = e[i];
if(vis[j])
{
if(w[i] ^ s[x] ^ s[j])
a.push_back(w[i] ^ s[x] ^ s[j]);
}
else
{
s[j] = s[x] ^ w[i];
dfs(j);
}
}
}
void gauss()
{
for(int i = 60, j = 0; ~i && j < a.size(); i--)
{
for(int k = j; k < a.size(); k++)
if(a[k] >> i & 1)
{
swap(a[j], a[k]);
break;
}
if(~a[j] >> i & 1) continue;
for(int k = 0; k < a.size(); k++)
if(k != j && a[k] >> i & 1) a[k] ^= a[j];
j++;
}
}
int main()
{
cin >> n >> m;
for(int i = 1, a, b; i <= m; i++)
{
LL c;
scanf("%d%d%lld", &a, &b, &c);
add(a, b, c), add(b, a, c);
}
dfs(1);
sort(a.begin(), a.end(), greater<LL>());
a.erase(unique(a.begin(), a.end()), a.end());
gauss();
ans = s[n];
for(LL i : a)
if((ans ^ i) > ans) ans ^= i;
cout << ans << endl;
return 0;
}
回复
共 4 条回复,欢迎继续交流。
正在加载回复...