20181010模擬賽 賽後處刑

2021-08-28 21:56:30 字數 1411 閱讀 8805

黃題第五套

【問題描述】

ufo 在樓下的花園裡種了棵樹,這棵樹上有 k 朵花。他還在樹上的某節點

上藏了封密信。

有n只 lzl從密信的位置出發,經過不超過 d 段樹枝,可

以到達的範圍內包含所有的花。

可以到達的範圍:如果從 a 出發,經過不超過 d 段樹枝,可以到達 b,則 b

屬於到達的範圍,否則不屬於。

【輸入格式】

第一行 3 個整數 n,k,d,n 表示樹的節點數,k,d 如題所示

第二行 k 個整數,表示有花的節點

後面 n-1 行每行兩個整數,描述每段樹枝連線的節點

【輸出格式】

輸出一行,乙個整數,表示可能放密信的節點數

【樣例輸入】

6 2 3

1 21 5

2 33 4

4 55 6

【樣例輸出】

3這道題第一眼樹形dp,事實上也確實能做,然而不會

以下為十分親民的bfs做法

兩遍bfs求距離最遠的兩朵花

兩遍bfs以這兩朵花作為起點擴充套件

腦補證明一下:

如果一朵花比這兩朵花深度還大,那麼所求的兩朵花一定不是最優解

所以其他花的深度一定小於最優解

因此乙個點只要能同時到達最優的兩朵花,就一定能到達所有花

#include#include#include#includeint const maxn=5001000;

int ans,n,k,d;

int cnt;

int head[maxn];

int dis[maxn],vis[maxn],isf[maxn],is[maxn],ind[maxn];

struct node

maxx,fmaxx;

struct edge

}e[maxn<<1];

void add(int u,int v)

; head[u]=cnt;

}void bfs_best(int root)

//求距離最大的兩朵花可以參考樹的直徑的求法

//隨便找乙個非花非葉節點的點作為根

//第一遍bfs找到最長鏈(終點是花)

//以終點為起點再跑一遍bfs,一、二次的終點即解 }}

void bfs_imp(int root) }}

int main()

bfs_best(root);

fmaxx.id=maxx.id;

maxx.id=0,maxx.dis=0;

bfs_best(fmaxx.id);

bfs_imp(fmaxx.id);

bfs_imp(maxx.id);

printf("%d",ans);

return 0;

}

2 8模擬賽 賽後題解

難度排序 t4最高得分 前5名 t4由題意不難知道,每次選擇拔高的區間的右端點一定是 n 具體證明大家意會一下.考慮 f i j 表示當前選擇的左區間最右不超過 i 且拔高了 j 次的答案 則 f i j max 1 x二位樹狀陣列維護一下即可 看!樹套樹!時間複雜度 o nk cdot lognl...

2021 5 23模擬賽賽後總結

其實這次考試題目還是很水的 首先這次考試題目的資料範圍都很不對勁,動不動就 1e9 1e8 的,看著嚇人極了。可是沒想到,這題非常不講武德 上來直接給 1e9 套個 log 我全都防出去了啊,直接 給 1e9 的 log 來個三次方,也卡過去了啊 可是沒想到,他這 t2 又給我來乙個 1e9 我大意...

新生賽賽後總結

題目描述 蒲煜凡學長跟學妹出來約會了!蒲煜凡學長作為一名標準直男,想要給學妹買一杯奶茶,便問學妹喜歡喝什麼樣的奶茶,學妹回了兩個字 隨便 蒲煜凡學長傻眼了,但作為一名優秀的acmer,他是不會坐以待斃的,他早早便將學妹喜歡喝的奶茶 和奶茶店的 表弄到了手 現在你要根據奶茶 判斷學妹到底喜歡喝哪一種奶...