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