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的正整