HNOI2008 神奇的國度

2022-05-31 11:36:16 字數 1952 閱讀 5554

第一行兩個整數n,m。1<=n<=10000,1<=m<=1000000.表示有n個人,m對認識關係. 接下來m行每行輸入一對朋友

輸出乙個整數,最少可以分多少隊

4 51 2

1 42 4

2 33 4

3一種方案(1,3)(2)(4)

這道題,嘿嘿........

clj大神說染色問題貌似是np完全問題,話說np問題是神馬啊??但此題因為具有一些特別的性質,所以有專門的解法。

¨弦(chord):連線環中不相鄰的兩個點的邊。

¨弦圖(chordalgraph):乙個無向圖稱為弦圖當且僅當圖中任意長度大於3的環都至少有乙個弦。

¨單純點(simplicialvertex):設n(v)表示與點v相鄰的點集。乙個點稱為單純點當 + n(v)的誘導子圖為乙個團。

¨完美消除序列(perfect elimination ordering):這是乙個序列,它滿足v[i]在的誘導子圖中為單純點。

¨弦圖的判定:存在完美消除序列的圖為弦圖。可以用mcs最大勢演算法求出完美消除序列。

¨最大勢演算法 maximum cardinality search

·從n到1的順序依次給點標號(標號為i的點出現在完美消除序列的第i個)。

·設label[i]表示第i個點與多少個已標號的點相鄰,每次選擇label[i]最大的未標號的點進行標號。

¨判斷乙個序列是否為完美消除序列

·設中所有與vi相鄰的點依次為vj1,…, vjk。只需判斷vj1是否與vj2,…, vjk相鄰即可。

¨本題就是用最少的顏色給每個點染色使得相鄰的點染的顏色不同。

¨完美消除序列從後往前依次給每個點染上可以染的最小的顏色。

3.擴充套件

弦圖的方法有著很多經典用途:例如用最少的顏色給每個點染色使得相鄰的點染的顏色不同,通過完美消除序列從後往前依次給每個點染色,給每個點染上可以染的最小的顏色;最大獨立集問題,選擇最多的點使得任意兩個點不相鄰,通過完美消除序列從前往後能選就選。

我們再引入區間圖的思想,會驚奇地發現它也是弦圖。給定一些區間,定義乙個相交圖為每個頂點表示乙個區間,兩個點有邊當且僅當兩個區間的交集非空,如下圖所示的區間圖:

很顯然區間圖一定是弦圖。這是因為如果存在乙個長度大於3的無弦環,剛ii與ii+1相交的部分pi一定嚴格遞增或嚴格遞減,以遞增為例,即p1

< pn。但由於第乙個i1與最後乙個in相交剛得出pn <

p1產生矛盾。所以區間圖一定是弦圖。給定n個區間,要求選擇最多的區間使得區間不互相重疊,這個問題就是區間圖的最大獨立集問題。

完美消除序列從後往前依次給每個點染上可以染的最小的顏色(為什麼??????)

1 #include2 #include3 #include4 #include

5#define node 10010

6#define edg 2000010

7using

namespace

std;89

int n,m,ans=0,head[node],next[edg],to[edg],edgs=0;10

int hash[node],color[node]=,label[node]=,v[node]=,a[node]=;

1112

void add(int a,int

b)15

16int

main()

1727

28 label[0]=-1;29

for(int i=n;i>=1;--i)

3039

40for(int i=n;i>=1;--i)

4149

50for(int i=1;i<=n;++i)

51if(color[i]>ans) ans=color[i];

5253 cout

54//

system("pause");

55return0;

5657 }

HNOI2008 神奇的國度

最大團數 最小色數 最大獨立集 最小團覆蓋 第一行兩個整數n,m。1 n 10000,1 m 1000000.表示有n個人,m對認識關係.接下來m行每行輸入一對朋 友輸出乙個整數,最少可以分多少隊 4 51 2 1 42 4 2 33 4 3一種方案 1,3 2 4 網上一搜才找到是最大勢演算法 完...

HNOI2008 神奇的國度

傳送門 好像是一道非常神仙的題 本題中具體的概念可以參見cdq大神的 弦圖與區間圖 我們直接來說吧。從這道題中的描述可以看出,由所有人向其認識的人連一條邊,構成的是一張標準的弦圖。而題目要求我們求出這張弦圖的最小染色數。有乙個非常重要的定理 對於一張弦圖,團數 色數 這個證明很難懂不過可以自己領會 ...

HNOI2008 神奇的國度

bzoj1006 這個題就是經典的最小點染色問題的模型。對於弦圖 題目中保證只有三角形,一定是弦圖 可以按其完美序列 乙個點的排列,使得每個點都是字尾的單純點 鄰居節點構成完全圖的點 逆序依次染色,即可求得最小染色。求完美序列可以用最大勢能法 mcs 演算法的過程為每次找出乙個勢能最大的點,放到當前...