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,3)(2)(4) 弦圖染色我為什麼要學這種沒用的東西==1 21 4
2 42 3
3 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 演算法的過程為每次找出乙個勢能最大的點,放到當前...