Scoi2016 背單詞(trie 貪心)

2022-05-05 12:39:09 字數 832 閱讀 8132

題意:重新解釋一下題意吧(題意晦澀難懂)

給定n個單詞,你可以按照順序學習,當學習這一單詞時,這個單詞是第x個要學習的單詞,需要的代價分三類:

1、若存在其他單詞是其字尾沒被學習,則代價為n2

2、若不存在其他單詞是其字尾,則代價是x

3、否則代價是x-y(y是最靠後的是其字尾的單詞學習的位置)

題解:首先第一種情況要是存在顯然不是最優的,然後很容易聯想到建立字串的反串。為了使答案盡可能小,一定存在一種方案為樹上的dfs序,容易證明這樣一定比不是dfs序更優。然後取出關鍵點,按照子樹大小從小到大排列一下就完了,為什麼從小到大排序,因為排隊接水問題大家應該是知道的。

#includeusing

namespace

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);

}

view code

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邊插入線性基,維護每個點到根路徑上的線性基 每個詢問,如果所屬不同的子樹,那麼過當前重...