一道线性基的题目,蒟蒻是在不知道错哪里了。
/*
@ author:pyyyyyy
-----思路------
-----debug-------
*/
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=50034,M=100005;
const int MAX_BASE=62;
struct node
{
int v,Next,w;
}e[M*2+1];
int head[N],ecnt;
int n,m;
void add(int u,int v,int w)
{
e[++ecnt].Next=head[u];
head[u]=ecnt;
e[ecnt].v=v;
e[ecnt].w=w;
}
int d[N+20],a[N+M+20],b[MAX_BASE+3];
int vis[N+20],cnt;
void dfs(int u,int fa)
{
vis[u]=1;
for(int i=head[u];i;i=e[i].Next){
int to=e[i].v;
if(!vis[to])
{
d[to]=d[u]^e[i].w;
dfs(to,u);
}
else a[cnt++]=d[u]^d[to]^e[i].w;
}
}
void prepare()
{
for(int i=0;i<cnt;++i)
{
for(int j=MAX_BASE;j>=0;--j)
if(a[i]>>j&1)
{
if(b[j]) a[i]^=b[j];
else {
b[j]=a[i];
for(int k=j-1;k>=0;--k)
if(b[k]&&(b[j]>>k&1)) b[j]^=b[k];
for(int k=j+1;k<=MAX_BASE;++k)
if(b[k]>>j&1) b[k]^=b[j];
break;
}
}
}
}
signed main() {
// freopen(".in","r",stdin);
// freopen(".out","w",stdout);
cin>>n>>m;
for(int i=0;i<m;++i)
{
int u,v,w;
scanf("%lld %lld %lld",&u,&v,&w);
u--;v--;
add(u,v,w);add(v,u,w);
}
dfs(0,0);
// for(int i=0;i<cnt;++i) cout<<a[i]<<' ';
// cout<<endl;
prepare();
// for(int i=0;i<=MAX_BASE;++i) cout<<b[i]<<' ';
// cout<<endl;
int ans=d[n-1];
for(int i=0;i<=MAX_BASE;++i)
if((ans^b[i])>ans) ans^=b[i];
cout<<ans;
return 0;
}
出现错误的数据