poj3657 二分 並查集

2021-06-25 12:07:16 字數 670 閱讀 8498

二分哪一次操作是最後一次正確的操作 ,+1即為錯誤操作。

把最小值相同的詢問確定下來,可以得到乙個最小的集合,再更新這個集合的所屬,若有衝突就說明此操作有問題。

#include#include#include#define maxd 1000010

#define maxq 25010

using namespace std;

int n, q, x, p[maxd], col[maxd], s[maxd];

struct que

}q[maxq], t[maxq];

int getfa(int x)

void init()

void refresh(int x, int y)

}int deal(int n)

if(x > y)

return 0;

fa = getfa(x);

if(col[fa] != 0 && getfa(fa) >= y)

return 0;

refresh(tx, ty);

}return 1;

}void solve()

printf("%d\n", mid == q ? 0 : mid + 1);

}int main()

POJ 2985(樹狀陣列 並查集 二分)

題目 這題考察了兩個點呢,組合並用到了並查集,求第k大的數用到了樹狀陣列,剛開始wa了幾次,發現是在組合並之後僅僅update 1 了一次,因為是刪除了兩個組增加了乙個組,應該是update 1 兩次,不細心啊。include include include using namespace std ...

關押罪犯 並查集 二分

s 城現有兩座監獄,一共關押著n 名罪犯,編號分別為1 n。他們之間的關係自然也極不和諧。很多罪犯之間甚至積怨已久,如果客觀條件具備則隨時可能爆發衝突。我們用 怨氣值 乙個正整數值 來表示某兩名罪犯之間的仇恨程度,怨氣值越大,則這兩名罪犯之間的積怨越多。如果兩名怨氣值為c 的罪犯被關押在同一監獄,他...

擴散(二分答案 並查集)

乙個點每過乙個單位時間就會向四個方向擴散乙個距離,兩個點a b連通,記作e a,b 當且僅當a b的擴散區域有公共部分。連通塊的定義是塊內的任意兩個點u v都必定存在路徑e u,a0 e a0,a1 e ak,v 給定平面上的n給點,問最早什麼時刻它們形成乙個連通塊。我們可以二分答案,然後對於每個時...