題意:重新解釋一下題意吧(題意晦澀難懂)
給定n個單詞,你可以按照順序學習,當學習這一單詞時,這個單詞是第x個要學習的單詞,需要的代價分三類:
1、若存在其他單詞是其字尾沒被學習,則代價為n2
2、若不存在其他單詞是其字尾,則代價是x
3、否則代價是x-y(y是最靠後的是其字尾的單詞學習的位置)
題解:首先第一種情況要是存在顯然不是最優的,然後很容易聯想到建立字串的反串。為了使答案盡可能小,一定存在一種方案為樹上的dfs序,容易證明這樣一定比不是dfs序更優。然後取出關鍵點,按照子樹大小從小到大排列一下就完了,為什麼從小到大排序,因為排隊接水問題大家應該是知道的。
#includeusingview codenamespace
std;
const
int n=5e5+7
;int n,tot,ch[n][26
],val[n],sz[n],dfn[n];
long
long
ans;
char
str[n];
vector
g[n];
void
build()
val[u]=1;}
void dfs1(int u,int
fa)bool cmp(int a,int b)
void dfs2(int u,int
fa)int
main()
tot=0
; dfs2(
1,0);
printf(
"%lld
",ans);
}
SCOI2016 背單詞 Trie樹,貪心
題目鏈結 首先吐槽一波原題意,描述地太不清楚了,還是出題人想要出語文斷句題?題目鏈結是團隊考試的題,題意重置版。顯然我們要避免那種 i i 的情況,因為這樣非常不划算,i 2 i i j 那我們來看看能不能安排乙個合法的順序來規避這個情況。顯然是可以的,因為如果我們按照字尾關係連邊,它會形成乙個 d...
SCOI2016 背單詞 題解
題意的話就看題面吧。我們一步一步的來分析 首先吃最少的泡椒,那麼顯然可以貪心,由於n n n times n n n貢獻的肯定比後面的方式都大,所以我們考慮將乙個串它的所有存在的字尾串全部先放在前面,這時就不會用第一種了,然後我們考慮,可以將這種關係用邊連起來,就成了一棵樹,我們可以舉個例子來看 5...
SCOI2016 幸運數字
線性基合併o log 2n 不能更小 但是倍增o qlog 3n 可過233333 甚至樹剖o qlog 4n 可過666666 還有乙個樹上路徑查詢利器 點分治!詢問離線 列舉重心,處理路徑過重心的詢問 邊dfs邊插入線性基,維護每個點到根路徑上的線性基 每個詢問,如果所屬不同的子樹,那麼過當前重...