8 条题解
-
2
路径最大异或和
#include<bits/stdc++.h> #define int long long #define enel "\n" #define MOD 1000000007 using namespace std; const int MAXN=50000; const int MAXL=60; struct NOTE { signed v; int s; }; vector<NOTE> e[MAXN+5]; int tot[MAXN+5]; int a[MAXL+5]; int n,m,ans; bool book[MAXN+6]; void insert(int num) { for(int j=60;j>=0;j--) { if(!num) return; if(!(num&(1ll<<j))) continue; if(a[j]!=0) { num=num^a[j]; continue; } for(int k=0;k<j;k++) if(num&(1ll<<k)) num=num^a[k]; for(int k=j+1;k<=60;k++) if(a[k]&(1ll<<j)) a[k]=a[k]^num; a[j]=num; break; } return; } void dfs(int now,int sum) { book[now]=true; tot[now]=sum; for(int i=0;i<e[now].size();i++) { signed v=e[now][i].v; int w=e[now][i].s; if(book[v]) { insert(sum ^ w ^ tot[v]); continue; } dfs(v,sum^w); } return; } signed main() { ios::sync_with_stdio(false); cin.tie(0); cin>>n>>m; for(int i=1;i<=m;i++) { int u,v,x; cin>>u>>v>>x; e[u].push_back((NOTE){v,x}); e[v].push_back((NOTE){u,x}); } dfs(1,0); ans=tot[n]; for(int i=0;i<=MAXL;i++) ans=max(ans,ans^a[i]); cout<<ans<<endl; return 0; }
信息
- ID
- 1277
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 6
- 标签
- 递交数
- 15
- 已通过
- 13
- 上传者