完美消除序列,MCS演算法
首先,我們有一些定義
對於普通圖的兩個性質:
而在弦圖就變成了:
對與序列中的點vi,排在vi後面並且和vi相連的點是一個團
一個圖存在完美消除序列是它是弦圖的充要條件
那麼完美消除序列有什麼用呢?用處可大啦
求弦圖的最大團數/最小色數的時候,只要在完美消除序列上從後往前貪心染色即可。
而求最大獨立集/最小團覆蓋的時候,只要在完美消除序列上從前往後貪心取點即可。
MCS演算法
從後往前確定序列的點,每取一個點都把還沒加入序列的和它相連的點的標號+1,每次取點選擇標號最大的點之一。
具體實現好難描述不想說了= =下面有程式碼,複雜度O(m+n)
據說如果圖是弦圖,這個演算法求出來的序列可以保證是完美消除序列
那麼當我們需要判定弦圖的時候,就要判斷這個序列是不是完美消除序列了。
判斷的方法是:
從後往前確定序列中的每個點v是否滿足條件:排在v後面的和v相連的點集記為N(v)中排在最前的點記為next(v)是否和N(v)中其他點都相連。
具體實現是,點數少的話直接拿鄰接矩陣判相連O(m+n),點數多就把邊表排序然後二分O(m
相關推薦
完美消除序列,MCS演算法
首先,我們有一些定義 對於普通圖的兩個性質: 最大團數 ≤ 最小染色數 最大獨立集 ≤ 最小團覆蓋 而在弦圖就變成了: 最大團數=最小色數 最大獨立集=最小團覆蓋 對與序列中的點vi,排在vi後面並且和vi相連的點是一個團 一個圖
BZOJ 1006 完美消除序列&最大勢演算法&弦圖
K國是一個熱衷三角形的國度,連人的交往也只喜歡三角原則.他們認為三角關係:即AB相互認識,BC相互認識,CA相互認識,是簡潔高效的.為了鞏固三角關係,K國禁止四邊關係,五邊關係等等的存在.所謂N邊關係,是指N個人 A1A2...An之間僅存在N對認識關係:(A1A2)(A2A3)...(AnA1),而沒有
1006: [HNOI2008]神奇的國度[完美消除序列MCS]
題意:用最少的顏色把圖染成任意兩個相鄰的點顏色不同。 演算法:完美消除序列 演算法介紹: 首先把圖中所有的點標記為0,然後找一個點入隊,每次隊頭元素為標記最大的點即要消除的點,對於消除的點,我們要與他相連的點標記+1,然後沒有消除的點入隊。 題解: 我們根據MCS的過
BZOJ 1006 完美消除序列&最大勢算法&弦圖
是否 完全 ima ont 單純 染色 完美 最大團 給定 K國是一個熱衷三角形的國度,連人的交往也只喜歡三角原則.他們認為三角關系:即AB相互認識,BC相互認識,CA相互認識,是簡潔高效的.為了鞏固三角關系,K國禁止四邊關系,五邊關系等等的存在.所謂N邊關系,是指N個
] 找工作知識儲備(2)---陣列字串那些經典演算法:最大子序列和,最長遞增子序列,最長公共子串,最長公共子序列,字串編輯距離,最長不重複子串,最長迴文子串
作者:寒小陽 時間:2013年9月。 0、前言 這一部分的內容原本是打算在之後的字串或者陣列專題裡面寫的,但看著目前火熱進行的各家網際網路公司筆試面試中,出現了其中的一兩個內容,就隨即將這些經典問題整理整理,單寫一
【資料結構】以鄰接矩陣作儲存結構,求連通分量的個數,設計演算法求圖G的深度,深度優先序列輸出
#include <iostream> #define MaxVerNum 100 typedef char ElemType; using namespace std; typedef struct { ElemType vexs[MaxV
已知二叉樹的先序遍歷序列和中序遍歷序列,輸出該二叉樹的後序遍歷序列
iostream code tor data- span main ast avi dsm 題目描寫敘述 輸入二叉樹的先序遍歷序列和中序遍歷序列,輸出該二叉樹的後序遍歷序列。 輸入 第一行輸入二叉樹的先序遍歷序列; 第二行輸入二叉樹的中序遍歷序列。 輸出 輸出該二叉樹的
Python基礎課:定義一個函數,輸入一個序列,判斷序列是順序還是逆序,順序輸出UP,逆序輸出DOWN,否則輸出None
逆序 python基礎 ted == sorted fun spa span def 1 def fun(arg): 2 try: 3 li = list(arg) 4 if(sorted(li)==li): 5
LIS&LCS最長上升子序列,最長公共子序列
最大 for 位置 升序 最終 二分 mage -1 end 何為子序列? 子序列是 從原序列取任意多項 不改變它們的順序 得到序列 最長上升子序列是: 取出的子序列元素大小從小到大 一個O(N^2)的算法 狀態 d[ i ] 表示 以第i個元素為結尾 得到的上升子
安卓初次完美調試,並成功編程!
顯示 gettext options miss listener ptr chan 控制 列表 語言都是相通的,爽歪歪2017-12-0317:33:58 這是GosDeviceControlActivity.java的代碼 1 package com.gizwits
51nod 1623 完美消除(數位DP)
eof div ... 狀態 class esp bool turn gpo 首先考慮一下給一個數如何求它需要多少次操作。 顯然用一個單調棧就可以完成:塞入棧中,將比它大的所有數都彈出,如果棧中沒有當前數,答案+1。 因為數的範圍只有0~9,所以我們可以用一
字典,序列,集合,引用
字典序列集合引用#-*- coding:utf-8 -*- #------字典-------- '''字典類似於通過聯系人名查找聯系人的詳細信息,即,把鍵(名字)和值(詳細情況)聯系在一起, 鍵必須唯一,只能使用不可變的對象如字符串來作為字典的鍵,但是可以把不可變或者可變對象作為 字典
輸入兩個整數序列,第一個序列表示棧的壓入順序,請判斷第二個序列是否為該棧的彈出順序
ack pan back 表示 return i++ ++ 輸入 gpo 1 class Solution{ 2 public: 3 bool IsPopOrder(vector<int> pushV,vector<int> popV){
Matlab產生隨機序列,並采樣
clas 四舍五入 true light ... zeros body gpo end clear all; M = 10; % bit數 符號數 N = 100; % 總采樣數 L = N/M; % 每bit采樣數 emp_rate = 0.5; % 占空比 imp =
【劍指offer】 和為s的連續正數序列,C++實現
轉載 urn 劍指offer find small vector tps cout AD 原創博文,轉載請註明出處! # 題目 # 思路 設置兩個輔助變量small和big,small表示序列的最小值,big表示序列的最大值。如果sum(small ~ big
CF988 C. Equal Sums【map+pair/hash/任選兩個序列,兩個序列都除去他們中的一個數,使的總和相同】
相同 value can 個數 sca code esp 分析 return 【鏈接】:CF988C 【題意】:在n個序列中任選兩個序列,兩個序列都除去他們中的一個數,使的總和相同 【分析】:map
連續自然數序列,求取中位數方案
計算 方案 獲取 位操作 最大的 移位操作 中位數 計算機 最小 描述: 有一組連續的有序的自然數,需要獲取這組自然數的中位數,自然數從 low -> high,low表示最小的,high表示最大的數 第一種方案: (low+high)/2 -1
oracle數據庫,增加序列,自增序列,規定位數,不足用0補足
class start pan art ext code acl str lec <select id="getXXXXXX" resultType="String"> select (‘Y‘||lpad(SEQ_WMSTART_CODE.ne
給定一個序列,判斷該序列是否是對應輸入序列的出棧序列問題
n) 建立 args scanner stack exti ati 壓入 以及 最近在刷劍指offer的題目,有問題描述如下: 輸入兩個整數序列,第一個序列表示棧的壓入順序,請判斷第二個序列是否可能為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,
已知長度為n的線性表A採用順序儲存結構,請寫一個時間複雜度為O(n)、空間複雜度為O(1)的演算法,該演算法可刪除線性表中所有值為item的資料元素。
語言:C++ #include <iostream> using namespace std; typedef int ElemType; //定義 #define MAXSIZE 100 typedef struct {ElemType *elem; int length;}Sq