SDOI2013 刺客信條

2022-05-11 01:21:04 字數 1726 閱讀 1583

故事發生在1486 年的義大利,ezio 原本只是乙個文藝復興時期的貴族,後來因為家族成員受到聖殿騎士的殺害,決心成為一名刺客。最終,憑藉著他的努力和出眾的天賦,成為了傑出的刺客大師,他不僅是個身手敏捷的武林高手,飛簷走壁擅長各種暗殺術。刺客組織在他的帶領下,為被剝削的平民聲張正義,趕跑了原本統治義大利的聖殿騎士首領-教皇亞歷山卓六世。在他的一生中,經歷了無數次驚心動魄、扣人心弦的探險和刺殺。

曾經有一次,為了尋找altair 留下的線索和裝備,ezio 在佛羅倫斯中的刺客墓穴進行探索。這個刺客墓穴中有許多密室,且任何兩個密室之間只存在一條唯一的路徑。這些密室裡都有乙個刺客標記,他可以啟動或者關閉該刺客標記。為了開啟儲存著線索和裝備的儲藏室,ezio 必須操作刺客標記來揭開古老的封印。要想解開這個封印,他需要通過改變某些刺客標記的啟動情況,使得所有刺客標記與封印密碼「看起來一樣」。

在這裡,「看起來一樣」的定義是:存在一種「標記」密室與「密碼」密室之間一一對應的關係,使得密室間的連線情況和啟動情況相同(提示中有更詳細解釋)。幸運的是,在ezio 來到刺客墓穴之前,在da vinci 的幫助下,ezio 已經得知了開啟儲藏室所需要的密碼。

而你的任務則是幫助ezio 找出達成目標所需要最少的改動標記次數。

首先固定一棵樹,列舉另一棵樹,顯然另一棵樹只有與固定的樹同構才有可能產生貢獻

如果固定的樹以重心為根,那麼另一棵樹最多就只有重心為根才有可能同構了(可能有兩個)

然後就是求改動次數最小值,設 \(f[x][y]\) 表示以第一棵樹 \(x\) 為根的子樹內和 第二棵樹內 \(y\) 為根的子樹內,達到目標最少需要改動的次數

我們發現只有同構的子樹需要決策,我們把同構的子樹分別拿出來,我們要做的就是做乙個匹配,跑一邊 \(km\) 或者費用流就好了

\(f[x][y]\) 要記憶化一下,判斷同構用樹雜湊即可

#include#define pb push_back

using namespace std;

templatevoid gi(t &x)

typedef unsigned long long ll;

const int n=1410,bas=10007;

int n,head[n],nxt[n*2],to[n*2],num=0,sz[n],f[n]=,rt=0,a[n],b[n];ll v[n];

vectorv1[n],v2[n];

inline void link(int x,int y)

inline void getroot(int x,int last)

f[x]=max(f[x],n-sz[x]);

if(f[x]*v)

sort(v[x].begin(),v[x].end(),comp);

for(int i=v[x].size()-1;i>=0;i--)v[x]=v[x]*n+v[v[x][i]];

v[x]=v[x]*n+sz[x];

}int f[n][n],c[n][n];

namespace sks

inline void init()

inline bool spfa()

for(int i=1;i<=n;i++)gi(a[i]);

for(int i=1;i<=n;i++)gi(b[i]);

getroot(1,1);dfs(rt,rt,v2);ll tmp=v[rt];

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

} cout

}

SDOI2013 保護出題人

出題人銘銘認為給sdoi2012 出題太可怕了,因為總要被罵,於是他又給sdoi2013 出題了。參加sdoi2012 的小朋友們釋放出大量的殭屍,企圖攻擊銘銘的家。而你作為sdoi2013的參賽者,你需要保護出題人銘銘。殭屍從唯一一條筆直道路接近,你們需要在銘銘的房門前放置植物攻擊殭屍,避免殭屍碰...

SDOI2013 保護出題人

點此看題 感覺這道題網上講解不是特別清楚,我來補一發詳細講解吧,因為作者也是花了好久才搞懂。首先把題目所求轉化成形式化表達 其中s ss是生命值a aa的字首和 i 1nmax j 1is i s j 1 x i i j d sum n max i frac i 1 n j 1maxi x i i ...

SDOI2013 直徑(樹的直徑)

小q最近學習了一些圖論知識。根據課本,有如下定義。樹 無迴路且連通的無向圖,每條邊都有正整數的權值來表示其長度。如果一棵樹有n個節點,可以證明其有且僅有n 1 條邊。路徑 一棵樹上,任意兩個節點之間最多有一條簡單路徑。我們用 dis a,b 表示點a和點b的路徑上各邊長度之和。稱dis a,b 為a...