bzoj2115
来源:互联网 发布:linux下多线程机制 编辑:程序博客网 时间:2024/06/10 09:02
这题。。。不看看题解谁tm想得到标算!看了题解。。。谁tm不会写。。。唯一有点技巧性的就是生成树的时候判环那个操作(因为一个点只要被访问了两次那么两条路径一xor必然是一个环,不是环的部分是重合的所以抵消了)其他的话。注意一下di是longlong 我因为不喜欢看那么长的题目所以看的都是简化版题目没能注意到被卡了好几发
#include <cstdio> #include <cmath> #include <ctime> #include <string> #include <cstring> #include <cstdlib> #include <iostream> #include <algorithm> #include <set> #include <stack> #include <queue> #include <vector> #include<map>#include<list> #define pb push_back #define lb lower_bound #define sqr(x) (x)*(x) #define lowbit(x) (x)&(-x) #define Abs(x) ((x) > 0 ? (x) : (-(x))) #define forup(i,a,b) for(int i=(a);i<=(b);i++) #define fordown(i,a,b) for(int i=(a);i>=(b);i--) #define ls(a,b) (((a)+(b)) << 1) #define rs(a,b) (((a)+(b)) >> 1) #define getlc(a) ch[(a)][0] #define getrc(a) ch[(a)][1] #define maxn 400005 #define maxm 100005 #define INF 1070000000 using namespace std; typedef long long ll; typedef unsigned long long ull; template<class T> inline void read(T& num){ num = 0; bool f = true;char ch = getchar(); while(ch < '0' || ch > '9') { if(ch == '-') f = false;ch = getchar();} while(ch >= '0' && ch <= '9') {num = num * 10 + ch - '0';ch = getchar();} num = f ? num: -num; } int out[100]; template<class T> inline void write(T x,char ch){ if (x==0) {putchar('0'); putchar(ch); return;} if (x<0) {putchar('-'); x=-x;} int num=0; while (x){ out[num++]=(x%10); x=x/10;} fordown(i,num-1,0) putchar(out[i]+'0'); putchar(ch); } /*==================split line==================*/int n,m; struct Edge {int to; ll len;};vector<Edge> g[maxn]; ll d[maxn]; vector<ll> a; bool vis[maxn];void dfs(int x){vis[x]=1; for(int i=0;i<g[x].size();i++) { int v=g[x][i].to; if(!vis[v]) { d[v]=d[x]^g[x][i].len; dfs(v); } else { a.pb(d[x]^g[x][i].len^d[v]); } } }void guass(){ int r=0; for(int i=62;i>=0;i--) { for(int j=r;j<a.size();j++) {if(a[j]>>i&1) {swap(a[r],a[j]); break; } } if(a[r]>>i&1) {} else continue; for(int j=0;j<a.size();j++) { if(j!=r&&a[j]>>i&1) a[j]=a[j]^a[r];}r++; }}int main(){ read(n);read(m); forup(i,1,m) { int x,y;ll z; read(x),read(y),read(z); g[x].pb((Edge){y,z});g[y].pb((Edge){x,z});}dfs(1);guass();ll ans=d[n];for(int i=0;i<a.size();i++) { ans=max(ans,ans^a[i]); } write(ans,'\n');return 0;}
0 0
- bzoj2115
- bzoj2115
- BZOJ2115
- BZOJ2115 Xor
- BZOJ2115 Xor
- 【bzoj2115】 Xor
- 【bzoj2115】【Wc2011】Xor
- bzoj2115【WC2001】Xor
- 【bzoj2115】[Wc2011] Xor 线性代数
- BZOJ2115: [Wc2011] Xor
- 【bzoj2115】[Wc2011] Xor
- BZOJ2115: [Wc2011] Xor
- 【WC2011】bzoj2115 Xor
- [题解]bzoj2115(WC2011)Xor
- bzoj2115( maxize xor)
- bzoj2115 [ WC2011 ] -- 线性基
- [BZOJ2115][Wc2011] Xor && dfs+高斯消元
- bzoj2115 线性基 异或
- JUnit4 基本用法实例
- git push常用命令
- 11. Container With Most Water
- sql---distinct函数用法
- 如何使用rem单位
- bzoj2115
- jQuery实现的进度条效果(未测试)
- Rightmost Digit
- Android富文本编辑器RichEditor的使用
- ios developer tiny share-20160721
- sizeof用法总结
- 【算法】堆,最大堆(大顶堆)及最小堆(小顶堆)的实现
- 点击button然后改变其中文字的颜色
- windows构建socket前需要加载WinSock库