bzoj2115( maxize xor)

来源:互联网 发布:js获取页面滚动条位置 编辑:程序博客网 时间:2024/06/13 16:17

 

how amazing the problem is!

 

#include<cstdio>#include<cmath>#include<cstring>#include<cstdlib>#include<algorithm>#include<queue>using namespace std;typedef long long ll;const int N=100005;int n,m;int head[N],tot;struct aa{int to,pre;ll dis;}edge[N*2];void addedge(int u,int v,ll d){edge[++tot].to=v;edge[tot].pre=head[u];edge[tot].dis=d;head[u]=tot;}int dfn[N],cnt;ll f[N],tmp[N*2],num;void dfs(int u,int fa){dfn[u]=++cnt;for (int v,i=head[u];i;i=edge[i].pre)if ((v=edge[i].to)!=fa){if (dfn[v]==0){f[v]=f[u]^edge[i].dis;dfs(v,u);}else tmp[++num]=f[u]^f[v]^edge[i].dis;}}ll b[65];int main(){scanf("%d%d",&n,&m);int u,v;ll d;for (int i=1;i<=m;i++){scanf("%d%d%lld",&u,&v,&d);addedge(u,v,d);addedge(v,u,d);}dfs(1,0);for (int i=1;i<=num;i++){for (int j=62;j>=0;j--) if ((tmp[i]>>j)&1) {if (b[j]) tmp[i]^=b[j];else {b[j]=tmp[i];break;}}}for (int i=62;i>=0;i--)if ((f[n]^b[i])>f[n]) f[n]=f[n]^b[i];printf("%lld",f[n]);return 0;}


 

1 0
原创粉丝点击