【問題描述】
有兩個監獄,要關押n個罪犯。兩個罪犯直接可能會有怨氣值,若這兩人在同乙個監獄,則會爆發乙個事件,事件的影響力等於兩個罪犯的怨氣值。答案等於所有事件的影響力的最大值,要使答案最小。有m對罪犯有怨氣值。
n≤20000,m≤100000
【分析】
曾經有大牛說過,一般題目求「最小值的最大值」或「最大值的最小值」的話,都可以用二分做。這句話真心很好用啊!
二分答案,然後構造二分圖,即怨氣值大於答案的罪犯需在不同監獄,若可以構造則修改右邊界,否則修改左邊界。總時間複雜度o(n log c)。
【**】
ps:懶得寫鍊錶直接用vector存邊不要介意。
#include #include#include
#include
#include
using
namespace
std;
struct
edge
};vector
e[20010
];int a[20010
];bool p[20010
];int
n,m;
intmax;
bool dfs(int
x) }
else
}return
true;}
bool check(int
k)int
main()
int l = 1,r = 0x3f3f3f3f
;
while (r >l )
cout
}
noip2010 關押罪犯
s 城現有兩座監獄,一共關押著n 名罪犯,編號分別為1 n。他們之間的關係自然也極 不和諧。很多罪犯之間甚至積怨已久,如果客觀條件具備則隨時可能爆發衝突。我們用 怨 氣值 乙個正整數值 來表示某兩名罪犯之間的仇恨程度,怨氣值越大,則這兩名罪犯之 間的積怨越多。如果兩名怨氣值為c 的罪犯被關押在同一監...
NOIP2010關押罪犯
s 城現有兩座監獄,一共關押著n 名罪犯,編號分別為1 n。他們之間的關係自然也極不和諧。很多罪犯之間甚至積怨已久,如果客觀條件具備則隨時可能爆發衝突。我們用 怨氣值 乙個正整數值 來表示某兩名罪犯之間的仇恨程度,怨氣值越大,則這兩名罪犯之間的積怨越多。如果兩名怨氣值為c 的罪犯被關押在同一監獄,他...
NOIP 2010 關押罪犯
題目描述 s 城現有兩座監獄,一共關押著n 名罪犯,編號分別為1 n。他們之間的關係自然也極不和諧。很多罪犯之間甚至積怨已久,如果客觀條件具備則隨時可能爆發衝突。我們用 怨氣值 乙個正整數值 來表示某兩名罪犯之間的仇恨程度,怨氣值越大,則這兩名罪犯之間的積怨越多。如果兩名怨氣值為c 的罪犯被關押在同...