HNOI2006 潘多拉的盒子

2022-05-09 11:18:10 字數 2275 閱讀 7884

題目描述

題解:題目的描述比較長,理解起來也有一定難度。仔細讀題後我們發現整個任務可以分成兩個部分:找出咒語機之間所有的公升級關係、求最長公升級序列。

1、 求公升級關係:

容易看出,咒語機i可以抽象成乙個圖gi

,其頂點集vi

為ni個元件,每個頂點發出兩條邊——「0」邊和「1」邊,分別表示將訊號加「0」和加「1」。

我們列舉兩個咒語機a、

b(a≠

b),判斷

b是否是

a的公升級。最簡單的想法是生成出a和

b的所有咒語源,然後判斷前者是否為後者的子集。但是,乙個咒語機產生的咒語源可能有無限多個,無法逐一判斷。

其實,只要存在乙個咒語源,a能夠產生而

b不能產生,那麼這一公升級關係就不成立。為了找到(或者證明不存在)這樣的乙個咒語源,我們構造圖

h,其頂點是乙個二元組

(i,j)

,表示圖ga

的頂點i和圖gb

的頂點j。如果圖ga

的頂點i走「c」邊到達頂點ic(c=0,1),圖gb

的頂點j走「c」邊到達頂點jc

,那麼從圖h的頂點

(i,j)

連有向邊到

(ic,jc)。我們將圖

h中的某些頂點

(i,j)

稱為「關鍵頂點」,其特點是:圖ga

的頂點i是輸出元而圖gb

的頂點j不是輸出元。存在乙個

a能夠產生而

b不能的咒語源,等價於圖

h中存在從頂點

(0,0)

到關鍵頂點的路徑。我們只需用廣度優先搜尋遍歷圖

h即可。

2、 求最長公升級序列:

假設第1部分求出的公升級關係儲存在圖

g中:如果咒語機b是

a的公升級,那麼圖g中從

a向b連一條有向邊。最長公升級序列在圖中對應最長路經。如果

g是有向無環圖,那麼可以用拓撲排序加上動態規劃的方法求最長路徑。可惜的是,

g有可能存在環,並且只有一種可能:存在若干個咒語機,它們產生的咒語源完全相同。顯然,在這種情況下,只要選擇其中乙個,那麼與之相同的所有咒語機都可以被選擇。因此,我們把圖中所有相同的咒語機合併成乙個結點,並用

num域記錄該結點是由多少個結點合併而來(如圖1)。

這樣,問題轉化為在乙個有向無環圖中求帶權最長路經,這同樣可以用拓撲排序加上動態規劃的方法解決。具體的方法是:首先將圖的頂點重新編號使得1,2,…,n是圖的拓撲序,然後利用狀態轉移方程求解即可。

以上兩個部分中,第一部分的時間複雜度為o(n2s2),第二部分的時間複雜度為

o(s2),所以演算法的總時間複雜度為

o(n2s2)。

**:

#include#include

#include

#include

using

namespace

std;

const

int n = 55

;int

s;struct

node

for(int i=0;i)

}}p[n];

inthed[n],cnt;

struct

ege[n*n],e0[n*n];

void ae(int f,int

t)struct

pair

pair(

int x,int

y):x(x),y(y){}

};bool

vs[n][n];

bool check(node &a,node &b)

return1;

}int

dep[n],low[n],tot;

bool

vis[n];

intbel[n],bc,siz[n],sta[n],tl;

void tarjan(int

u)else

if(vis[to])

}if(dep[u]==low[u])

}}bool

eg[n][n];

inthed[n],cnt;

void ae(int f,int

t)int

dp[n];

int dfs(int

u)int

main()

int ans = 0

;

for(int i=1;i<=bc;i++)ans=max(ans,dfs(i));

printf(

"%d\n

",ans);

return0;

}

開啟潘多拉的盒子

既然都說plotly是最好的資料視覺化庫,沒有之一,那這匹烈馬為什麼在redash的馴服下像乙隻小貓呢?資料展現力甚至不如某chart和某寶的antv。經過達之資料工程師和redash原版團隊的深入溝通,答案在這裡。原來redash定位為普及型資料視覺化生產力工具,力求降低門檻,人人都可大資料的目標...

HNOI2006 鬼谷子的錢袋

time limit 10 sec memory limit 162 mb submit 5784 solved 3880 submit status discuss description 鬼谷子非常聰明,正因為這樣,他非常繁忙,經常有各諸侯車的特派員前來向他諮詢時政。有一天,他在咸陽遊歷的時候,...

HNOI2006 鬼谷子的錢袋

嘟嘟嘟 這題學過多重揹包二進位制優化都知道用二進位制拆分就行,然而題中說兩數不能相同,比如9,拆分後就是1 2 2 4,不符合,所以遇到a i a i 1 的情況,就a i a i 1 就行。1 include2 include3 include4 include5 include6 include...