BZOJ 2115 异或线性基+DFS找环
来源:互联网 发布:linux下多线程编程 编辑:程序博客网 时间:2024/06/14 08:23
题目链接
题意:给定一个
思路:
解决此题只需要基于一个事实:
任意一条
为什么呢?
简单画个图,举个例子~:
考虑下面的这个图,
可见从
对于任意的一条,比如说:
当该路径异或上标号
易发现,路径
刚好为第二条路径。
同理,当该路径异或上标号
故易发现:对于一个经过某路径的环来说,一定是从某个点
那没有经过路径的环呢?比如
对于这种情况,我们可以看成我们先到那个环走上一圈,再原路返回,这样从起点到环的路径走了两次,异或后为
对于上面的情况,异或上环
故我们可以找出图中的所有的环的异或和,构建其异或线性基,然后对于一条任意的从
至此,大功告成。
代码:
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;typedef long long ll;const int A = 5e4 + 10;class Gra{public: int v,next;ll w;}G[A<<2];int head[A],tot,twt,n,m;ll dis[A],a[A<<2],b[110];bool vis[A];void add(int u,int v,ll w){ G[tot].v = v; G[tot].w = w; G[tot].next = head[u]; head[u] = tot++;}void dfs(int u,int pre){ vis[u] = 1; for(int i=head[u] ;i!=-1 ;i=G[i].next){ int v = G[i].v;ll w = G[i].w; if(v == pre) continue; if(!vis[v]){ dis[v] = dis[u] ^ w; dfs(v,u); } else a[++twt] = dis[u]^dis[v]^w; }}void init_Xor(){ for(int i=1 ;i<=twt ;i++) for(int j=62 ;j>=0 ;j--){ if(a[i]>>j & 1){ if(b[j]) a[i] ^= b[j]; else{ b[j] = a[i]; for(int k=j-1 ;k>=0 ;k--) if(b[k] && (b[j]>>k&1)) b[j] ^= b[k]; for(int k=j+1 ;k<=62;k++) if(b[k]>>j&1) b[k] ^= b[j]; break; } } }}int main(){ memset(head,-1,sizeof(head)); scanf("%d%d",&n,&m); for(int i=1 ;i<=m ;i++){ int u,v;ll w; scanf("%d%d%lld",&u,&v,&w); add(u,v,w);add(v,u,w); } dfs(1,1);init_Xor(); for(int i=62 ;i>=0 ;i--) if((dis[n]^b[i]) > dis[n]) dis[n]^=b[i]; printf("%lld\n",dis[n]); return 0;}
阅读全文
0 0
- BZOJ 2115 异或线性基+DFS找环
- BZOJ 2115: [Wc2011] Xor (dfs + gauss 线性基 异或最长路)
- bzoj 2115: [Wc2011] Xor 线性基+dfs树
- bzoj 2115: [Wc2011] Xor(DFS+线性基)
- 图的异或 dfs树+线性基
- BZOJ 2844 异或线性基(HDU3949 升级版
- BZOJ 2115 线性基
- HDU 5544 Ba Gua Zhen (DFS找环+线性基)
- bzoj 1616 dfs 或 dp
- [BZOJ]2115 Xor 线性基
- BZOJ 2115 Xor(dfs&独立回路&异或消元)
- dfs找环
- 找环dfs
- bzoj2115 线性基 异或
- BZOJ 2115([Wc2011] Xor-线性基求法)
- BZOJ 2115 WC2011 Xor 线性基+贪心
- [高斯消元 线性基] BZOJ 2115 [Wc2011] Xor
- 【BZOJ 2115】[Wc2011] Xor 线性基
- HDU 1541 Stars(树状数组)
- 常见异常处理
- A. Arpa and a research in Mexican wave
- 学习笔记1
- PAT 乙级练习题1006. 换个格式输出整数 (15)
- BZOJ 2115 异或线性基+DFS找环
- (康托展开解释)+ NYOJ 139 我排第几个
- Objective-C的自动提示宏
- 数据结构 快速排序
- 自定义水平进度条
- 第一篇:tensorflow入门
- 断点续传下载原理实现
- switch语句求小写元音字母
- 笔记--Whitelabel Error Page