首先我们可以将这张图转化为一棵树,其中可能有好多环,肯定是从1走到N,其中可能经过好多环,

因为我们不走N在的一支,最后还是会走回来,因为a xor b xor b=a,所以相当于没走,就是走了个环,

那么我们这个题可以转化成有若干个环的值,还有1-n的值,在环中全任意个,xor起来再xor 1-n的,

使最后最大。

求环的时候我们可以记下每个点的一个值,代表从1到这个点的路径值xor,用size表示(我英语不好。。。)

那么我们做一遍dfs,如果X访问到已经走过的点P了,那么就出现了环,环中的值就是SIZE[p] xor size[x] xor len[q]

这样我们就得到了环的值。

这里的环不一定是所有的环,可能有些环得不到,但是通过已知的值可以xor出来

那么问题就被成功的转化了,这时我们需要了解一些性质

假设集合A,其中我们将ai替换成ai xor a[j] i<>j,那么得到的新集合,这个集合中元素能xor出的值于集合A相同

那么我们就用类似于高斯消元的方法,将每个数(环的值)弄成二进制来看(只是来看),从高位找起,如果所有二进制

最高位是i,那么找到一个最高位是I的元素,用a[i] xor a[j] 替换所有最高位是I的元素j,那么这个集合可以看成是不变的

(能得出的值不变),并且将I元素移出A集合,直到集合中没有数为止

那么我们可以得到一些移出集合的值(也叫做第I位的基),我们从最高位开始贪心,设1-n的xor是ans,那么我们看ans的I位

是不是1,如果不是那么就xor上第I位的基,最后输出ans就行了

/**************************************************************
    Problem:
    User: BLADEVIL
    Language: Pascal
    Result: Accepted
    Time: ms
    Memory: kb
****************************************************************/
 
//By BLADEVIL
var
    n, m                            :int64;
    pre, other                      :array[..] of int64;
    len                             :array[..] of int64;
    last                            :array[..] of int64;
    l                               :int64;
    a                               :array[..] of int64;
    flag                            :array[..] of boolean;
    size                            :array[..] of int64;
    tot                             :int64;
    ans                             :int64;
     
procedure swap(var a,b:int64);
var
    c                               :int64;
begin
    c:=a; a:=b; b:=c;
end;   
 
procedure connect(x,y:int64;z:int64);
begin
    inc(l);
    pre[l]:=last[x];
    last[x]:=l;
    other[l]:=y;
    len[l]:=z;
end;
 
procedure dfs(x:int64);
var
    q, p                            :int64;
begin 
    flag[x]:=true;
    q:=last[x];
    while q<> do
    begin
        p:=other[q];
        if not flag[p] then
        begin
            size[p]:=size[x] xor len[q];
            dfs(p);
        end else
        begin
            inc(tot);
            a[tot]:=size[x] xor len[q] xor size[p];
            if a[tot]= then dec(tot);
        end;
        q:=pre[q];
    end;
end;
 
procedure init;
var
    i                               :longint;
    x, y                            :int64;
    z                               :int64;
begin
    read(n,m);
    for i:= to m do
    begin
        read(x,y,z);
        connect(x,y,z);
        connect(y,x,z);
    end;
    dfs();
end;
    
procedure qs(low,high:int64);
var
    i, j                            :longint;
    xx                              :int64;
begin
    i:=low; j:=high; xx:=a[(i+j) div ];
    while i<j do
    begin
        while a[i]>xx do inc(i);
        while a[j]<xx do dec(j);
        if i<=j then
        begin
            swap(a[i],a[j]);
            inc(i); dec(j);
        end;
    end;
    if i<high then qs(i,high);
    if j>low then qs(low,j);
end;
    
procedure main;
var
    i, j, k                         :longint;
    cur                             :int64;
     
begin
    fillchar(flag,sizeof(flag),false);
    cur:=<<;
    for i:= to do
    begin
        for j:= to tot do
        if not flag[j] then
            if a[j] and cur=cur then
            begin
                flag[j]:=true;
                for k:= to tot do
                    if (not flag[k]) and (a[k] and cur=cur) then
                        a[k]:=a[k] xor a[j];
                break;
            end;
        cur:=cur>>;
    end;
    qs(,tot);
    ans:=size[n];
    for i:= to tot do
    begin
        if a[i]= then break;
        if ans xor a[i]>ans then ans:=ans xor a[i];
    end;
    writeln(ans);
end;
    
begin
    init;
    main;
end.

bzoj 2115 路径xor和最大值的更多相关文章

  1. BZOJ 2115: [Wc2011] Xor

    2115: [Wc2011] Xor Time Limit: 10 Sec  Memory Limit: 259 MB Submit: 2794  Solved: 1184 [Submit][Stat ...

  2. BZOJ.2115.[WC2011]Xor(线性基)

    题目链接 \(Description\) 给定一张无向带边权图(存在自环和重边).求一条1->n的路径,使得路径经过边的权值的Xor和最大.可重复经过点/边,且边权和计算多次. \(Soluti ...

  3. BZOJ 2115: [Wc2011] Xor DFS + 线性基

    2115: [Wc2011] Xor Time Limit: 10 Sec  Memory Limit: 259 MB Description Input 第一行包含两个整数N和 M, 表示该无向图中 ...

  4. bzoj 2115: [Wc2011] Xor xor高斯消元

    2115: [Wc2011] Xor Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 797  Solved: 375[Submit][Status] ...

  5. bzoj 2115 [Wc2011] Xor——路径和环的转化

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2115 思路很精妙.好像能应用到很多地方. 发现如果路径上有环,可以通过一些走法达到 异或了那 ...

  6. bzoj 2115 [Wc2011] Xor 路径最大异或和 线性基

    题目链接 题意 给定一个 \(n(n\le 50000)\) 个点 \(m(m\le 100000)\) 条边的无向图,每条边上有一个权值.请你求一条从 \(1\)到\(n\)的路径,使得路径上的边的 ...

  7. BZOJ 2115: [Wc2011] Xor [高斯消元XOR 线性基 图]

    啦啦啦 题意: N 个点M条边的边带权的无向图,求1到n一条XOR和最大的路径 感觉把学的东西都用上了.... 1到n的所有路径可以由一条1到n的简单路径异或上任意个简单环得到 证明: 如果环与路径有 ...

  8. BZOJ 2115 Wc2011 Xor DFS+高斯消元

    标题效果:鉴于无向图.右侧的每个边缘,求一个1至n路径,右上路径值XOR和最大 首先,一个XOR并能为一个路径1至n简单的路径和一些简单的XOR和环 我们开始DFS获得随机的1至n简单的路径和绘图环所 ...

  9. bzoj 2115: [Wc2011] Xor【线性基+dfs】

    -老是想到最长路上 其实可以这样:把每个环的xor和都存起来,然后任选一条1到n的路径的xor和ans,答案就是这个ans在环的线性基上跑贪心. 为什么是对的--因为可以重边而且是无相连通的,并且对于 ...

随机推荐

  1. (原)编写JAVA工具之json自动封装成pojo

    代码在最后 我个人是不太喜欢http和json,可能是游戏做的多了的原因的,对通信协议和通信方式特敏感,因此即使是做应用我也会选择rpc而非http,但是有时候因为各种原因,还是不的不处理标准的htt ...

  2. 让webapi支持CORS,可以跨域访问

    1.在NuGet里搜索webapi找到下面的扩展,添加进项目里. 2.在Global.asax中添加一行代码 protected void Application_Start() { //添加CORS ...

  3. Visual Studio 2010安装包

    点击下载

  4. 扩展欧几里得 求ax+by == n的非负整数解个数

    求解形如ax+by == n (a,b已知)的方程的非负整数解个数时,需要用到扩展欧几里得定理,先求出最小的x的值,然后通过处理剩下的区间长度即可得到答案. 放出模板: ll gcd(ll a, ll ...

  5. 配置Android应用开发环境

    详解JRE.JDK.SDK.ADT请点击辨析ADK&JVM&JRE&JDK&ADT 一.安装JDK 开发 Android应用程序的时候,仅有Java运行环境(Java ...

  6. Uva 12627 Erratic Expansion(递归)

    这道题大体意思是利用一种递归规则生成不同的气球,问在某两行之间有多少个红气球. 我拿到这个题,一开始想的是递归求解,但在如何递归求解的思路上我的方法是错误的.在研读了例题上给出的提示后豁然开朗(顺便吐 ...

  7. 《学习OpenCV》课后习题解答7

    题目:(P105) 创建一个结构,结构中包含一个整数,一个CvPoint和一个 CvRect:称结构体为"my_struct". a. 写两个函数:void Write_my_st ...

  8. elasticsearch集群及filebeat server和logstash server

    elasticsearch集群及filebeat server和logstash server author:JevonWei版权声明:原创作品blog:http://119.23.52.191/ 实 ...

  9. 【bzoj2006】[NOI2010]超级钢琴 倍增RMQ+STL-堆

    题目描述 小Z是一个小有名气的钢琴家,最近C博士送给了小Z一架超级钢琴,小Z希望能够用这架钢琴创作出世界上最美妙的音乐. 这架超级钢琴可以弹奏出n个音符,编号为1至n.第i个音符的美妙度为Ai,其中A ...

  10. 【bzoj2330】[SCOI2011]糖果 差分约束系统

    题目描述 幼儿园里有N个小朋友,lxhgww老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果.但是小朋友们也有嫉妒心,总是会提出一些要求,比如小明不希望小红分到的糖果比他的多,于是在分配 ...