HDU 5544 Ba Gua Zhen (dfs&独立回路&异或消元)

原创 2015年11月17日 16:31:36

这道题和BZOJ 2115
基本一样,容易一点,直接存个代码:这个代码要好看一点(好像并没有什么区别。。。)

#include <bits/stdc++.h>
#define LL long long
#define FOR(i,x,y)  for(int i = x;i < y;++ i)
#define IFOR(i,x,y) for(int i = x;i > y;-- i)

using namespace std;

const int maxn = 50050;
const int maxm = 100010;

int head[maxn],edge_cnt,n,m,tot;

struct Edge{
    int u,v;
    LL val;
    int nt;
}edge[maxm<<1];

void addedge(int u,int v,LL val){
    edge[edge_cnt].u = u;
    edge[edge_cnt].v = v;
    edge[edge_cnt].val = val;
    edge[edge_cnt].nt = head[u];
    head[u] = edge_cnt++;
}

void Build_Graph(){
    memset(head,-1,sizeof(head));
    edge_cnt = 0;
    scanf("%d%d",&n,&m);
    FOR(i,0,m){
        int u,v;    LL val;
        scanf("%d%d%I64d",&u,&v,&val);
        addedge(u,v,val);
        addedge(v,u,val);
    }
}

LL val[maxm<<1];
LL d[maxn];
bool vis[maxn];

void dfs(int u,int fa){
    vis[u] = true;
    for(int i = head[u];i != -1;i = edge[i].nt){
        int v = edge[i].v;
        if(v == fa)  continue;
        if(!vis[v]){
            d[v] = d[u] ^ edge[i].val;
            dfs(v,u);
        }
        else{
            val[tot++] = d[u]^d[v]^edge[i].val;
        }
    }
}

int xorguass(int n){
    int row = 0;
    for(int i = 60;i >= 0;-- i){
        int j;
        for(j = row;j < n;++ j){
            if(val[j] & (1LL<<i))   break;
        }
        if(j != n){
            swap(val[j],val[row]);
            for(j = 0;j < n;++ j){
                if(j == row)    continue;
                if(val[j] & (1LL<<i))   val[j] ^= val[row];
            }
            ++ row;
        }
    }
    return row;
}

void work(){
    memset(vis,false,sizeof(vis));
    tot = 0;
    d[1] = 0;
    dfs(1,-1);
    n = xorguass(tot);
    LL ans  = 0;
    FOR(i,0,n)  ans ^= val[i];
    printf("%I64d\n",ans);
}

int main()
{
    //freopen("test.in","r",stdin);
    int T,tCase = 0;    scanf("%d",&T);
    while(T--){
        printf("Case #%d: ",++tCase);
        Build_Graph();
        work();
    }
    return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

HDU 5544 (独立回路 高斯消元)

Ba Gua Zhen Time Limit: 6000/4000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others) Tota...
  • morejarphone
  • morejarphone
  • 2016年04月28日 15:09
  • 633

【HDU5544 2015CCPC 南阳国赛E】【树上dfs找本质不同环 高斯消元 时间戳优化】Ba Gua Zhen 连通图上最大异或环

Ba Gua Zhen Time Limit: 6000/4000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others) Tota...
  • snowy_smile
  • snowy_smile
  • 2015年11月19日 15:31
  • 1758

hdu5544 Ba Gua Zhen(高斯消元)

思路:首先DFS把图上的所有环找出来,然后就是K个数里面任意选数使得异或和最大,高斯消元就好了 异或方程的高斯消元见 点击打开链接 #include using namespace std...
  • qq_21057881
  • qq_21057881
  • 2016年07月27日 22:52
  • 1096

HDU5544 线性基

简略题意:在一张图上,从任意位置出发,回到这个位置,走过的路径的亦或和最大是多少。和BZOJ2115这题基本一致,只是少了一个初值。BZOJ2115#include #define maxn 110...
  • meopass
  • meopass
  • 2017年09月07日 14:16
  • 130

hdu5544 Pick The Sticks(dp)

还是得正视这场比赛了。。不说了,就放代码。 http://acm.hdu.edu.cn/showproblem.php?pid=5543 #include #include #include ...
  • cacyth
  • cacyth
  • 2015年11月06日 13:36
  • 709

HDU 5544 Ba Gua Zhen (dfs&独立回路&异或消元)

这道题和BZOJ 2115 基本一样,容易一点,直接存个代码:这个代码要好看一点(好像并没有什么区别。。。)#include #define LL long long #define FOR(i,...
  • u014610830
  • u014610830
  • 2015年11月17日 16:31
  • 637

hdu 5544 Ba Gua Zhen

link因为在沈阳站的比赛中我们没有做出来H题,后来才知道是高斯消元。于是我先来补一下高斯消元的题目。先做了hdu XOR对线性基有了一定的了解,然后来做一下南阳ccpc的Ba Gua Zhen分析:...
  • hahatianx
  • hahatianx
  • 2016年10月26日 19:26
  • 181

[HDU] 5544 Ba Gua Zhen

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5544题目大意:T组数据, 给一个n个点, m条边的无向连通图, 无自环, 无重边, 求最大XOR回路...
  • u013578420
  • u013578420
  • 2017年10月22日 16:54
  • 64

hdu 5544 Ba Gua Zhen

http://acm.hdu.edu.cn/showproblem.php?pid=5544题意: 有一个n(
  • yp_2013
  • yp_2013
  • 2016年03月08日 08:47
  • 490

Ba Gua Zhen HDU - 5544 线性基

题目链接点这里 大意:n个点,m条边的无向图,求一个回路的最大异或 ,,一个回路可以分解为多个回路,总异或就是各个小回路异或和,因此我们可以先求出所有回路的异或值,然后求线性基,贪心取最大,即可 ...
  • qq_30927651
  • qq_30927651
  • 2017年03月06日 22:08
  • 80
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:HDU 5544 Ba Gua Zhen (dfs&独立回路&异或消元)
举报原因:
原因补充:

(最多只允许输入30个字)