题意:

一个无向图,每条边有值,找出无向图中所有的环的异或和,问这些值能异或出来的最大值。

解题思路:

去年的做的比赛里的题,今年才补上。

找环用dfs跑一遍图就可以找出来了,然后求最大的异或和,这是线性基的应用,用高消对求出来的异或和跑一下求出线性基,然后就是线性基求异或最大值的套路了。

思路是蛮清晰但是还是很容易错,用来存环的异或和的数组和边数m开的一样大了结果超了,但是hdu返回tle,抠了好久的时间也不对,去uestc上交了一发是re才察觉到这里出了问题,然后细节也要处理好,比如存边和线性基的数组都要开longlong

代码:

#include <bits/stdc++.h>
#define ps push_back
#define LL long long
using namespace std;
const int maxn=1e5+5;
long long  a[maxn*100];
int book[maxn];
long long xo[maxn];
vector<pair<int, LL> >edg[maxn];
int  n, top;
void dfs(int x, int y)
{book[x]=1;int i, j, to;for(i=0; i<(int)edg[x].size(); i++){to=edg[x][i].first;if(to==y)continue;if(book[to]){a[top++]=xo[x]^xo[to]^edg[x][i].second;}else if(book[to]==0){xo[to]=xo[x]^edg[x][i].second; dfs(to, x);}}return;
}
void gauss()
{  int i, j, row=1;  for(j=60; j>=0; j--)  {  for(i=row; i<=top-1; i++)  {  if((a[i]>>j)&1)  {  break;  }  }  if(i>top-1)continue;  swap(a[i], a[row]);  for(i=0; i<top; i++)  {  if(i!=row && (a[i]>>j)&1) a[i]^=a[row];  }  row++;  }
}
int main()
{int x, y, m, i, j, e=1, t;long long z;long long ans=0;scanf("%d", &t);while(t--){top=0;scanf("%d%d", &n, &m);for(i=1; i<=60; i++)a[i]=0;for(i=1; i<=m; i++){scanf("%d%d%lld", &x, &y, &z);edg[x].ps(make_pair(y,z));edg[y].ps(make_pair(x,z));}for(i=1; i<=n; i++)if(book[i]==0)dfs(i, -1);for(i=top; i<=60; i++)a[i]=0;gauss();ans=0;for(i=0; i<=60; i++){ans=max(ans, ans^a[i]);}printf("Case #%d: %lld\n", e++, ans);for(i=1; i<=n; i++){book[i]=xo[i]=0;edg[i].clear();}}
}

hdu 5544 Ba Gua Zhen(线性基+dfs)相关推荐

  1. hdu 5544 Ba Gua Zhen

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

  2. HDU 5544 Ba Gua Zhen ( 2015 CCPC 南阳 C、DFS+时间戳搜独立回路、线性基 )

    题目链接 题意 : 给出一副简单图.要你找出一个回路.使得其路径上边权的异或和最大 分析 : 类似的题有 BZOJ 2115 对于这种异或最长路的题目(走过的边可以重复走) 答案必定是由一条简单路径( ...

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

    这道题和BZOJ 2115 基本一样,容易一点,直接存个代码:这个代码要好看一点(好像并没有什么区别...) #include <bits/stdc++.h> #define LL lon ...

  4. [HDU] 5544 Ba Gua Zhen

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5544 题目大意:T组数据, 给一个n个点, m条边的无向连通图, 无自环, 无重边, 求最大XOR回 ...

  5. Ba Gua Zhen

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5544 学习链接:https://www.cnblogs.com/qscqesze/p/4902518. ...

  6. 2015南阳CCPC E - Ba Gua Zhen 高斯消元 xor最大

    Ba Gua Zhen Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 无 Description During the Three-Kingdom perio ...

  7. hdu5544 Ba Gua Zhen(高斯消元)

    思路:首先DFS把图上的所有环找出来,然后就是K个数里面任意选数使得异或和最大,高斯消元就好了 异或方程的高斯消元见 点击打开链接 #include<bits/stdc++.h> usin ...

  8. Codeforces 724 G Xor-matic Number of the Graph 线性基+DFS

    G. Xor-matic Number of the Graph http://codeforces.com/problemset/problem/724/G 题意:给你一张无向图.定义一个无序三元组 ...

  9. 【BZOJ2115】[Wc2011] Xor 高斯消元求线性基+DFS

    [BZOJ2115][Wc2011] Xor Description Input 第一行包含两个整数N和 M, 表示该无向图中点的数目与边的数目. 接下来M 行描述 M 条边,每行三个整数Si,Ti ...

最新文章

  1. Silverlight实用窍门系列:40.Silverlight中捕捉视频,截图保存到本地
  2. 用CreateProcess()在MFC中执行批处理命令
  3. 前端一HTML:二十二元素显示方式案例
  4. 大学考试分数越高学分越多吗_大学的绩点和学分有什么用?影响学生毕业吗
  5. google浏览器记住密码自动添加input框背景色问题
  6. php判断手机浏览器,php 获取 手机浏览器的信息 | 学步园
  7. 佩戴口罩、洗手消毒引导正确防疫插画素材
  8. LeetCode刷题(17)
  9. 三星linux打印机驱动官网下载,三星SL-C515驱动
  10. 【原】常见CSS3属性对iosandroidwinphone的支持
  11. git add 所有修改文件_工作中Git的使用实践
  12. [重庆思庄每日技术分享]-数据库创建组件时报错ORA-30554: XDB.XDB$ACL_XIDX is disabled
  13. 适合高中生看的科普类书籍,助力一窥科学世界
  14. 中南财经政法大学2014-2015学年学生奖励汇总表
  15. NTRIP传输相关,上篇SNIP NTRIP Caster学习笔记扫盲补充
  16. python+大数据学习day4
  17. 程序员讲装修内容思路
  18. Java中的equals和==比较
  19. [源码解析] 模型并行分布式训练Megatron (5) --Pipedream Flush
  20. 刘昊威 尊重自己的体系——《Men’s Uno 风度》 2012年6月号

热门文章

  1. 平面左右手坐标系与旋转矩阵的碎碎念
  2. python远程开发环境总结(Eclipse+Pydev)
  3. 执迷不悟!互联网的7宗罪!道翰天琼认知智能机器人平台API接口大脑为您揭秘。
  4. Sketch(三)——手绘微信图标
  5. PKG_PROG_PKG_CONFIG: command not found 解决方法
  6. React框架之对Dva和Umi的简单理解
  7. 《黑客与画家 》--- 地铁系列
  8. 支付宝微信合单支付对接说明
  9. 学3D建模,选对行业月薪3W,选错行业月薪3K!
  10. 图片合并成PDF,两个PDF的合并