HNOI2008 神奇的國度

2022-08-13 14:57:19 字數 1877 閱讀 2209

k國是乙個熱衷三角形的國度,連人的交往也只喜歡三角原則.他們認為三角關係:即ab相互認識,bc相互認識,ca相互認識,是簡潔高效的.為了鞏固三角關係,k國禁止四邊關係,五邊關係等等的存在.

所謂n邊關係,是指n個人 a1a2...an之間僅存在n對認識關係:(a1a2)(a2a3)...(ana1),而沒有其它認識關係.比如四邊關係指abcd四個人 ab,bc,cd,da相互認識,而ac,bd不認識.全民比賽時,為了防止做弊,規定任意一對相互認識的人不得在一隊,國王相知道,最少可以分多少支隊。

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

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

4 5

1 21 4

2 42 3

3 4

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

弦圖染色我為什麼要學這種沒用的東西==

就是乙個圖中所有長度大於3的環都有至少一條弦

然後說抄一下弦圖的概念

單純點:乙個點和與ta相鄰的點集所構成的誘導子圖是乙個團

所以乙個弦圖至少有乙個單純點

完美消除序列:就是乙個點的序列\(v_i\)在原圖上每乙個點\(v_i\),在\(v_\)所構成的圖中都是乙個單純點

如果乙個圖是弦圖,那麼ta一定有且只有乙個完美消除序列

就是維護每個點與多少個被染色的點相鄰\(d[i]\)

然後每次都選擇\(d[i]\)最大的中放進去最晚的,並對ta進行染色

再更新與ta相鄰的點

最後把這個選出的點放進序列中並以後不再選ta

這樣就得到了乙個倒序的完美消除序列

然後弦圖的極大團就是每個節點最大的勢\(d+1\)

完美消除序列從前往後能選就選

就是有一些線段,這些線段相互平行

然後我們要把邊當做點,能相交的線段連邊,就構成了區間圖

區間圖也是弦圖

然後這玩意兒也可以做區間覆蓋的問題但是我不會

大概就是把區間按照左/右區間排序然後染色或者按照完美消除序列加邊就好了

然後這個題就是求個最大團就沒了

#include#include#include#include#includeconst int m = 10005 ;

using namespace std ;

inline int read()

while(c>='0' && c<='9')

return x*w ;

}bool vis[m] ;

vector < int > vec[m] ;

int n , m , num , hea[m] , best ;

int cnt , q[m] , d[m] , ans ;

struct e edge[m * 200] ;

inline void add_edge(int from , int to)

int main()

for(int i = 1 ; i <= n ; i ++) vec[0].push_back(i) ;

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

}if(ftg) -- best ;

}q[--cnt] = k ; vis[k] = true ;

for(int i = hea[k] ; i ; i = edge[i].nxt)

}for(int i = n ; i >= 1 ; i --) ans = max(ans , d[i] + 1) ;

cout << ans << endl ;

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

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