COJ 1253 二分 2 sat判定

2021-06-07 13:37:15 字數 1555 閱讀 9368

x城的精神病院只有兩個病房,一共關著n 名病人,編號分別為1~n。病人之間的關係有時極不和諧。很多病人之間甚至積怨已久,如果客觀條件具備則隨時可能爆發衝突。我們用「不和諧值」(乙個正整數值)來表示某兩名病人之間的仇恨程度,不和諧值越大,則這兩名病人之間的積怨越多。如果兩名不和諧值為c 的病人被關在同一病房,他們倆之間會發生摩擦,並造成影響力為c 的衝突事件。

每年年末,院裡會將本年內病房中的所有衝突事件按影響力從大到小排成乙個列表,然後上報到市長那裡。公務繁忙的市長只會去看列表中的第乙個事件的影響力,如果影響很壞,他就會考慮撤換院長。在詳細考察了n 名病人間的矛盾關係後,院長表示鴨梨很大。他準備將病人們在兩座病房內重新分配,以求產生的衝突事件影響力都較小,從而保住自己的飯碗。

假設只要處於同一病房內的某兩個病人間有仇恨,那麼他們一定會在每年的某個時候發生摩擦。那麼,應如何分配病人,才能使市長看到的那個衝突事件的影響力最小?(即最和諧)這個最小值是多少?

input

輸入檔案的每行中兩個數之間用乙個空格隔開。

第一行為兩個正整數n 和m,分別表示病人的數目以及存在仇恨的病人對數。

接下來的m 行每行為三個正整數aj,bj,cj,表示aj 號和bj 號病人之間存在仇恨,其不和諧值為cj。資料保證1 <= aj < bj <= n , 0 < cj ≤ 1,000,000,000,且每對病人組合只出現一次。

output

共1 行,為市長看到的那個衝突事件的影響力。如果本年內精神病院中未發生任何衝突事件,請輸出0。

裸題不解釋

#include #include #include #include #include #include #include #define maxn 55555

#define maxm 500005

#define inf 1000000005

using namespace std;

struct edge

edge[maxm * 2];

int n, m, e, head[maxn];

int top, scc, index;

int x[maxm], y[maxm], c[maxm];

int dfn[maxn], low[maxn], instack[maxn], fa[maxn];

int st[maxn];

void init()

void insert(int x, int y)

void tarjan(int u)

else if(instack[v]) low[u] = min(low[u], dfn[v]);

}if(dfn[u] == low[u])

while(v != u);

}}void build(int mid)

}bool check()

void solve()

else low = mid + 1;

}printf("%d\n", ans);

}int main()

return 0;

}

BZOJ4698 差分 二分 SA

這題的難點在於相同的定義,在這樣的定義下一般的字串匹配演算法就不適用了。但是可以通過乙個操作,將前後相鄰的字串差分形成乙個長度為len 1的差分串,原來的相同下的定義就轉為了差分串的完全相同,證明顯然。在這種情況下,再把字串全部拼接起來,用特殊字元隔開,然後二分他們的長度去做字尾陣列,看有沒有相鄰的...

二分搜尋(2)

一 定義區域性最小的概念。arr長度為1時,arr 0 是區域性最小。arr的長度為n n 1 時,如果arr 0 arr 1 那麼arr 0 是區域性最小 如果arr n 1 arr n 2 那麼arr n 1 是區域性最小 如果0 i n 1,既有arr i arr i 1 又有arr i ar...

二分查詢 2

v1中使用while迴圈的方式,我們也可以不使用迴圈,使用遞迴的方式來實現 public static intbinarysearch v2 int array,int value public static intmysearch int array,int start,int end,int v...