日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

bzoj4668 冷战

發布時間:2023/12/20 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 bzoj4668 冷战 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

冷戰

Time Limit: 10 Sec Memory Limit: 256 MB

Description

1946 年 3 月 5 日,英國前首相溫斯頓·丘吉爾在美國富爾頓發表“鐵
幕演說”,正式拉開了冷戰序幕。
美國和蘇聯同為世界上的“超級大國”,為了爭奪世界霸權,兩國及其
盟國展開了數十年的斗爭。在這段時期,雖然分歧和沖突嚴重,但雙方都
盡力避免世界范圍的大規模戰爭(第三次世界大戰)爆發,其對抗通常通
過局部代理戰爭、科技和軍備競賽、太空競爭、外交競爭等“冷”方式進
行,即“相互遏制,不動武力”,因此稱之為“冷戰”。
Reddington 是美國的海軍上將。由于戰爭局勢十分緊張,因此他需要
時刻關注著蘇聯的各個活動,避免使自己的國家陷入困境。蘇聯在全球擁
有 N 個軍工廠,但由于規劃不當,一開始這些軍工廠之間是不存在鐵路
的,為了使武器制造更快,蘇聯決定修建若干條道路使得某些軍工廠聯通。
Reddington 得到了蘇聯的修建日程表,并且他需要時刻關注著某兩個軍工
廠是否聯通,以及最早在修建哪條道路時會聯通。具體而言,現在總共有
M 個操作,操作分為兩類:
? 0 u v,這次操作蘇聯會修建一條連接 u 號軍工廠及 v 號軍工廠的鐵
路,注意鐵路都是雙向的;
? 1 u v, Reddington 需要知道 u 號軍工廠及 v 號軍工廠最早在加入第
幾條條鐵路后會聯通,假如到這次操作都沒有聯通,則輸出 0;
作為美國最強科學家, Reddington 需要你幫忙設計一個程序,能滿足
他的要求。

Input

第一行兩個整數 N, M。
接下來 M 行,每行為 0 u v 或 1 u v 的形式。
數據是經過加密的,對于每次加邊或詢問,真正的 u, v 都等于讀入的
u, v 異或上上一次詢問的答案。一開始這個值為 0。
1 ≤ N, M ≤ 500000,解密后的 u, v 滿足1 ≤ u, v ≤ N, u不等于v

Output

對于每次 1 操作,輸出 u, v 最早在加入哪條邊后會聯通,若到這個操
作時還沒聯通,則輸出 0。

Sample Input

5 9

0 1 4

1 2 5

0 2 4

0 3 4

1 3 1

0 7 0

0 6 1

0 1 6

1 2 6

Sample Output

0

3




并查集啟發式合并就是科學的暴力QAQ。。。
因為你的路徑上有信息就不能路徑壓縮
然后你的find函數就要寫成遞歸,每找一次爸爸就更新一次信息就好了QAQ

#include<bits/stdc++.h> using namespace std; const int maxn = 5e5 + 5; int n, m, tot, lastans; int mx, fa[maxn], tim[maxn], deep[maxn], len[maxn];int find(int t){if(t == fa[t]){deep[t] = 1; return t;}int ret = find(fa[t]);deep[t] = deep[fa[t]] + 1; return ret; }inline void connect(int a, int b){int A = find(a), B = find(b); tot++;if(A == B) return;if(len[A] > len[B]) swap(A, B);fa[A] = B; tim[A] = tot;len[B] = max(len[B], len[A] + 1); }inline int Query(int a, int b){int A = find(a), B = find(b);if(A != B) return 0;if(deep[a] < deep[b]) swap(a, b);int ret = 0;while(deep[a] > deep[b]){ret = max(ret, tim[a]); a = fa[a];}while(a != b){ret = max(ret, tim[a]); ret = max(ret, tim[b]);a = fa[a]; b = fa[b];}return ret; }int main() {//freopen("lpl.in", "r", stdin);scanf("%d%d", &n, &m);for(int i = 1; i <= n; ++i){fa[i] = i; len[i] = 1;}int opt, u, v;while(m--){scanf("%d%d%d", &opt, &u, &v);u ^= lastans; v ^= lastans;if(!opt) connect(u, v);else{lastans = Query(u, v); printf("%d\n", lastans);}}return 0; }

轉載于:https://www.cnblogs.com/LLppdd/p/9782369.html

總結

以上是生活随笔為你收集整理的bzoj4668 冷战的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。