hdu 6109 資料分割

2021-08-06 04:01:44 字數 993 閱讀 5254

acm.hdu.edu.cn/showproblem.php?pid=6109

給出若干個條件:xi

=xj 或 xi

≠xj ,它們分屬若干組,但組與組之間的分隔符沒了,要重新分隔這幾組條件。

每一組條件的特點是:不可能成立,但去掉最後乙個條件後,就可以成立。

每次都貪心地常試將盡量多的條件放進當前這組,遇到第乙個與已有條件衝突時,就是分隔的時候。

相等有傳遞性,用並查集維護;不等沒有傳遞性,用 set 維護。

注意到:若x1

=x2,

x1≠x

3,x2

≠x4 ,那麼有:x1

≠x4,

x2≠x

3 。所以在用並查集將 x1

、x2 合併時(比如將x1

合併到x2

),就要將x1

的不相等的資訊合併到x2

#include 

#include

using

namespace

std;

const

int n = 100000;

set st[n+1];

int fa[n+1], rk[n+1];

void clear(int n)

}void pushup(int x, int y)

int root(int x)

void unite(int x, int y)

}int ans[n];

int main()

else

unite(x, y);

}else

else}}

printf("%d\n", top);

for(int i = 0; i < top; ++i)

printf("%d\n", ans[i]);

return

0;}

HDU 6109 資料分割 並查集 啟發式合併

題目鏈結 略對於相等的關係很好維護,關鍵是對於不想等的關係。如果 x i 與 x j 不相等,那麼 x i 所在集合中的所有點都是和 x j 所在集合中的所有點不相等的。把不相等的 x i 與 x j 所在集合的代表結點建一條邊,如果 x i 所在集合要和其他集合合併,那麼在合併的時候指向被合併集合...

hdu 5047平面分割

題目大意 給n條樣子像 m 的折線,求它們能把二維平面分成的面最多是多少。解題思路 我們發現直線1條 2平面 2直線 4平面 3直線 7平面.因為第n條直線要與前面n 1條直線都相交,才能使分的平面最多,則新增第n條直線,平面增加n個 所以公式是面f 2 2 3 n 1 n n 2 1 因為題目的是...

HDU 折線分割平面 遞推

折現分割平面 problem description 我們看到過很多直線分割平面的題目,今天的這個題目稍微有些變化,我們要求的是n條折線分割平面的最大數目。比如,一條折線可以將平面分成兩部分,兩條折線最多可以將平面分成7部分,具體如下所示。input 輸入資料的第一行是乙個整數c,表示測試例項的個數...