水题?不解释.
代码如下:
#include <bits/stdc++.h> using namespace std; typedef long long ll; const ll N=2e5+5; ll vis[N],d[N],a[N],cnt=0,n,m,ins[100],ans=0; vector<pair<ll,ll>>v[N]; void dfs(ll u,ll fa)//当前位子和它爸爸 { vis[u]=1; for(ll i=0;i<v[u].size();i++) { auto t=v[u][i]; //if(t.first==fa) continue; if(!vis[t.first]) { d[t.first]^=d[u]^t.second; dfs(t.first,u); } else { a[cnt++]=d[t.first]^d[u]^t.second; } } } void gauss() { for(int i=0;i<cnt;i++) { for(int j=61;j>=0;j--) { if(a[i]>>j&1) { if(!ins[j]) { ins[j]=a[i]; break; } else a[i]^=ins[j]; } } } ans=d[n]; for(ll i=62;i>=0;i--) { if((ans^ins[i])>ans) ans^=ins[i]; } } int main() { ll x,y,w; scanf("%lld%lld",&n,&m); for(ll i=1;i<=m;i++) { scanf("%lld%lld%lld",&x,&y,&w); v[x].push_back({y,w}); v[y].push_back({x,w}); } dfs(1,0); gauss(); cout<<ans<<endl; return 0; }