1. 程式人生 > >bzoj2155(高斯消元,線性基)

bzoj2155(高斯消元,線性基)

Description
在這裡插入圖片描述
Input
第一行包含兩個整數N和 M, 表示該無向圖中點的數目與邊的數目。 接下來M 行描述 M 條邊,每行三個整數Si,Ti ,Di,表示 Si 與Ti之間存在 一條權值為 Di的無向邊。 圖中可能有重邊或自環。
Output
僅包含一個整數,表示最大的XOR和(十進位制結果),注意輸出後加換行回車。
Sample Input
5 7
1 2 2
1 3 2
2 4 1
2 5 1
4 5 3
5 3 4
4 3 2
Sample Output
6
HINT
在這裡插入圖片描述
Source

就是很多個環和一個到n的路徑中取個異或最大…
然後就是高斯消元的經典運用了.
也是線性基

#include<bits/stdc++.h>
using namespace std;
#define rep(i,j,k) for(int i = j;i <= k;++i)
#define repp(i,j,k) for(int i = j;i >= k;--i)
#define rept(i,x) for(int i = linkk[x];i;i = e[i].n)
#define P pair<int,int>
#define Pil pair<int,ll>
#define Pli pair<ll,int>
#define
Pll pair<ll,ll>
#define pb push_back #define pc putchar #define mp make_pair #define file(k) memset(k,0,sizeof(k)) #define ll long long namespace fastIO{ #define BUF_SIZE 100000 #define OUT_SIZE 100000 bool IOerror = 0; inline char nc(){ static char buf[BUF_SIZE],*p1 = buf+BUF_SIZE,
*pend = buf+BUF_SIZE; if(p1 == pend){ p1 = buf; pend = buf+fread(buf, 1, BUF_SIZE, stdin); if(pend == p1){ IOerror = 1; return -1;} } return *p1++; } inline bool blank(char ch){return ch==' '||ch=='\n'||ch=='\r'||ch=='\t';} inline ll rd(){ bool sign = 0; char ch = nc();ll x = 0; for(; blank(ch); ch = nc()); if(IOerror)return 0; if(ch == '-') sign = 1, ch = nc(); for(; ch >= '0' && ch <= '9'; ch = nc()) x = x*10+ch-'0'; if(sign) x = -x; return x; } #undef OUT_SIZE #undef BUF_SIZE }; using namespace fastIO; int n , m , t , linkk[50100] , num; struct node{int n,y;ll v;}e[201000]; ll a[101000],v[101000],fk; bool vis[101000]; void insert() { int x = rd(),y = rd();ll z = rd(); e[++t].y = y;e[t].n = linkk[x];e[t].v = z;linkk[x] = t; e[++t].y = x;e[t].n = linkk[y];e[t].v = z;linkk[y] = t; } void dfs(int x,ll now,int fa) { v[x] = now;vis[x] = true; if(x == n) fk = now; rept(i,x) if(e[i].y != fa) if(!vis[e[i].y]) dfs(e[i].y,now^e[i].v,x); else if(v[e[i].y]!=-1)a[++num] = v[x]^v[e[i].y]^e[i].v; v[x] = -1; } void gus() { n = num;int M = n; rep(i,1,n) { rep(j,i+1,n) if(a[j] > a[i]) swap(a[i],a[j]); int k; if(a[i] == 0) {M = i-1;break;} for(k=60;k>=0;--k) if(a[i]>>k&1) break; rep(j,1,n) if(i != j && (a[j]>>k&1)) a[j]^=a[i]; } ll now = fk; rep(i,1,M) if((now ^ a[i]) > now) now ^= a[i]; printf("%lld",now); } int main() { n = rd();m = rd(); rep(i,1,m) insert(); dfs(1,0,0); gus(); return 0; }

相關推薦

bzoj2155(線性)

Description Input 第一行包含兩個整數N和 M, 表示該無向圖中點的數目與邊的數目。 接下來M 行描述 M 條邊,每行三個整數Si,Ti ,Di,表示 Si 與Ti之間存在 一條權值為 Di的無向邊。 圖中可能有重邊或自環。 Output 僅

【BZOJ2844】albus就是要第一個出場 線性

子集 高斯 efi continue clas sum ext ++ pre 【BZOJ2844】albus就是要第一個出場 Description 已知一個長度為n的正整數序列A(下標從1開始), 令 S = { x | 1 <= x <= n },

【BZOJ2460】[BeiJing2011]元素 貪心+線性

%d 很好 jin 種類 namespace 隨著 clu rip ret 【BZOJ2460】[BeiJing2011]元素 Description 相傳,在遠古時期,位於西方大陸的 Magic Land 上,人們已經掌握了用魔法礦石煉制法杖的技術。那時人們就

【BZOJ2322】[BeiJing2011]夢想封印 線性+DFS+set

思考 包含 cst 計算 next 裏的 是否 異或和 無法使用 【BZOJ2322】[BeiJing2011]夢想封印 Description 漸漸地,Magic Land上的人們對那座島嶼上的各種現象有了深入的了解。 為了分析一種奇特的稱為夢想封印(Fanta

線性版本)

首先給出幾篇部落格:https://blog.sengxian.com/algorithms/linear-basis                          http

bzoj3105(貪心線性擬陣)

Description 傳統的Nim遊戲是這樣的:有一些火柴堆,每堆都有若干根火柴(不同堆的火柴數量可以不同)。兩個遊戲者輪流操作,每次可以選一個火柴堆拿走若干根火柴。可以只拿一根,也可以拿走整堆火柴,但不能同時從超過一堆火柴中拿。拿走最後一根火柴的遊戲者勝利。

POJ.2065.SETI(線性方程組)

oid 求解 一個 fine earth std htm unique line 題目鏈接 http://blog.csdn.net/Clove_unique/article/details/54381675 http://blog.csdn.net/u013081425/

HDU.3571.N-dimensional Sphere(線性方程組)

con 需要 etc oid 如果 git inline cpp 由於 題目鏈接 高斯消元詳解 /* $Description$ 在n維空間中給定n+1個點,求一個點使得這個點到所有點的距離都為R(R不給出)。點的任一坐標|xi|<=1e17. $Solution$

【算法】&線性代數

for baidu == getchar 算法 print 密碼 mes pos 寒假作業~就把文章和題解3道題的代碼扔在這裏啦——鏈接: https://pan.baidu.com/s/1kWkGnxd 密碼: bhh9 1.HNOI2013遊走 #include &l

0x35 線性空間

jloi2015 tin 本質 空間 else 消元 none lose 第k大 頹了十天回來做題果然…… 感覺還是很有收獲的,這兩以前都沒學過 bzoj1013: [JSOI2008]球形空間產生器sphere poj1830 異或也可以

全主元素法C語言實現

#include <iostream> #include <cstdio> #include <cstring> #include <cmath> using namespace std; double A[1010][1010

求解線性方程組_BZOJ4004_裝備購買

點此開啟題目頁面 思路分析:     考慮求解所有n個裝備的屬性對應的n個長度為m的向量的基底, 使用高斯消元時, 每次選擇當前對應列非零, 且價格最低的行(裝備)進行消元, 具體實現如下AC程式碼所示: //BZOJ4004_裝備購買 #include <

bzoj2115 [Wc2011] Xor—— & 異或線性

++ r+ n) 沒有 get TP pro bzoj () 題目:https://www.lydsy.com/JudgeOnline/problem.php?id=2115 異或兩次同一段路徑的權值,就相當於沒有走這段路徑; 由此可以得到啟發,對於不同的走法,也許只需要找

【bzoj4004】【JLOI2015】裝備購買 (線性+

complete truct algo turn insert input 否則 沒有 main Description 臉哥最近在玩一款神奇的遊戲,這個遊戲裏有 n 件裝備,每件裝備有 m 個屬性,用向量zi(aj ,.....,am) 表示 (1 <= i <

題解 外星千足蟲(線性+)

置疑 pac 想要 %d ++ ldb printf ins n+1 題解 luogu外星千足蟲(線性基+高斯消元) 題目 luogu題目傳送門 題解想法 首先需要知道這是個異或方程對吧 然後既然看到位運算,又有這麽多,就可以考慮線性基(做題技巧),那我們就丟進去 接下

2018.12.07【LOJ114】k 大異或和(線性)(

傳送門 解析: 先求一個線性基,然後高斯消元解線性空間,然後基本上就是亂搞把第 k k k

BZOJ 3105 線性

思路: 按照從大到小排個序 維護兩個陣列 一個是消元后的 另一個是 按照消元的位置排的 不斷 維護從大到小 (呃具體見程式碼) //By SiriusRen #include <c

[ 線性] BZOJ 4269 再見Xor

這就很水了 #include<cstdio> #include<cstdlib> #include<algorithm> using namespace std;

hdu3949 XOR (線性())

hdu3949 XOR 題意: T組資料, 每組資料給n個數,m個詢問,對於每個詢問給出一個k,詢問給的n個數,選取任意非空子集,能異或出的數中第k小的,重複的數不計算。 資料範圍 T&

BZOJ 2844: albus就是要第一個出場 線性

2844: albus就是要第一個出場 Time Limit: 6 Sec  Memory Limit: 128 MBSubmit: 1416  Solved: 598 [Submit][Status][Discuss] Description 已知一個長度為n的正整