zoukankan      html  css  js  c++  java
  • [WC2011]最大XOR和路径

    题目

    神仙题啊

    发现题目里有一句非常重要的话“当一条边在路径中出现了多次时,其权值在计算 XOR 和时也要被计算相应多的次数

    这告诉我们走一条边两次显然没有什么贡献

    所以计算贡献的应该是那些走了奇数次的边

    我们发现我们可以把一个环上所有的边都走奇数次遍历一个环

    而两个环之间如果有路径连接的话这两个环的贡献都可以被算上,而不去计算路径的贡献

    也就是连接两个环的路径走一次,环上的边走两次

    所以环非常关键,我们可以选择很多的环使得我们的权值异或起来最大

    这里就需要一个线性基了,我们可以配合(dfs)搜索树,遇到一条返祖边就找到一个环,加入线性基

    尽管并没有加入所有的环,但是这些环可以将所有其他环都表示出来了

    之后我们选择一条从(1)(n)的路径作为初值,从线性基里选择一些环来增广这条路径,使得异或和最大就好了

    代码

    #include<algorithm>
    #include<iostream>
    #include<cstring>
    #include<cstdio>
    #define maxn 100005
    #define re register
    #define LL long long
    #define max(a,b) ((a)>(b)?(a):(b))
    #define min(a,b) ((a)<(b)?(a):(b))
    inline LL read() {
    	LL x=0;char c=getchar();while(c<'0'||c>'9') c=getchar();
    	while(c>='0'&&c<='9') x=(x<<3)+(x<<1)+c-48,c=getchar();return x;
    }
    struct E{int v,nxt;LL w;}e[maxn<<1];
    int head[maxn],dfn[maxn];
    LL pre[maxn];
    int num,n,m,cnt;
    LL lb[66];
    inline void add(int x,int y,LL z) {e[++num].v=y;e[num].nxt=head[x];head[x]=num;e[num].w=z;}
    inline void ins(LL x) {
    	for(re int j=62;j>=0;--j)
    		if(x>>j&1ll) {
    			if(!lb[j]) {lb[j]=x;break;}
    			else x^=lb[j];
    		}
    }
    void tarjan(int x,int fa) {
    	dfn[x]=1;
    	for(re int i=head[x];i;i=e[i].nxt)
    	if(!dfn[e[i].v]) pre[e[i].v]=pre[x]^e[i].w,tarjan(e[i].v,x);
    	else ins(pre[x]^pre[e[i].v]^e[i].w); 
    }
    int main()
    {
    	n=read(),m=read();
    	int x,y;LL z;
    	for(re int i=1;i<=m;i++) x=read(),y=read(),z=read(),add(x,y,z),add(y,x,z);
    	tarjan(1,0);
    	LL ans=pre[n];
    	for(re int i=62;i>=0;--i) if((ans^lb[i])>ans) ans^=lb[i];
    	printf("%lld
    ",ans);
    	return 0;
    }
    
  • 相关阅读:
    Delphi的类和对象(九)- 类运算符as、is
    delphi中as,is关键字是如何工作的?
    delphi 中 as 和 is 的使用
    甘超波:NLP发问技巧
    甘超波:NLP如何挖掘信念
    甘超波:NLP自我价值感
    甘超波:NLP次感元
    甘超波:NLP前提假设之每个人都有足够资源,能达成成功的资源
    甘超波:NLP十二条前提假设之重复旧的行为,只会得到旧的结果
    甘超波:NLP十二条前提假设之诺要求知、必须行动
  • 原文地址:https://www.cnblogs.com/asuldb/p/10388772.html
Copyright © 2011-2022 走看看