HNOI2008 神奇的國度

2022-05-13 09:51:12 字數 991 閱讀 1165

bzoj1006

這個題就是經典的最小點染色問題的模型。

對於弦圖(題目中保證只有三角形,一定是弦圖),可以按其完美序列(乙個點的排列,使得每個點都是字尾的單純點(鄰居節點構成完全圖的點))逆序依次染色,即可求得最小染色。

求完美序列可以用最大勢能法(mcs),演算法的過程為每次找出乙個勢能最大的點,放到當前序列的開頭,並將不在序列中的該節點的鄰居節點的勢能增加,即可求出完美序列。正確性沒有找到證明。使用鍊錶(桶)可以做到\(o(n+m)\)的複雜度。

由於求完美序列的順序和染色順序一致(逆序),所以可以同時進行這兩個步驟。

#include #include #include const int n = 10000 + 10;

const int m = 2000000 + 10;

int hd[n], to[m], nxt[m], cnt;

int col[n], flag[n], label[n], vis[n];

int lhd[n], lst[m], tot, w[m];

int ans, n, m;

inline void adde(int x, int y)

inline void push(int x)

inline void mcs()

} flag[w[cur]] = 1;

memset(vis, 0, sizeof vis);

for (int j = hd[w[cur]]; j; j = nxt[j]) else

} for (int j = 1; j <= n; ++j) if (!vis[j])

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

}int main()

mcs();

return 0;

}

開始刷八中的這兩天,突然覺得自己會的演算法太少了,有些演算法即使會也難以應用,還是要努力學習,多刷題,理解更多的演算法和模型,爭取早日擺脫蒟蒻的行列。

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 神奇的國度

第一行兩個整數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問題是神馬啊?...