題解 BZOJ1832 聚會(LCA)

2021-09-27 02:00:43 字數 1110 閱讀 4969

description

y島風景美麗宜人,氣候溫和,物產豐富。y島上有n個城市,有n-1條城市間的道路連線著它們。每一條道路都連線某兩個城市。幸運的是,小可可通過這些道路可以走遍y島的所有城市。神奇的是,乘車經過每條道路所需要的費用都是一樣的。小可可,小卡卡和小yy經常想聚會,每次聚會,他們都會選擇乙個城市,使得3個人到達這個城市的總費用最小。 由於他們計畫中還會有很多次聚會,每次都選擇乙個地點是很煩人的事情,所以他們決定把這件事情交給你來完成。他們會提供給你地圖以及若干次聚會前他們所處的位置,希望你為他們的每一次聚會選擇乙個合適的地點。

input

第一行兩個正整數,n和m。分別表示城市個數和聚會次數。後面有n-1行,每行用兩個正整數a和b表示編號為a和編號為b的城市之間有一條路。城市的編號是從1到n的。再後面有m行,每行用三個正整數表示一次聚會的情況:小可可所在的城市編號,小卡卡所在的城市編號以及小yy所在的城市編號。

output

一共有m行,每行兩個數pos和cost,用乙個空格隔開。表示第i次聚會的地點選擇在編號為pos的城市,總共的費用是經過cost條道路所花費的費用。

這道題其實就是在樹上找乙個點到這三個點的距離和最小。

作者道題的時候需要知道乙個結論,這三個點的lca必定有兩個相等,那麼另外乙個就是答案了。

#includeusing namespace std;

const int maxn = 5e5+7;

int n,m;

int head[maxn],cnt=0,f[maxn][21];

int dep[maxn];

struct edge

e[maxn*2];

inline void add(int x,int y)

void dfs(int x,int fa)

}int lca(int x,int y)

for(int i=20;i>=0;--i) }

return f[x][0];

}int cmp(int x,int y,int z)

int main()

dfs(1,0);

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

return 0;

}

bzoj3170 松鼠聚會

這個距離就是切比雪夫距離,有乙個神奇的東西是說將 x,y 變成 x y,x y 然後就是曼哈頓距離,因此轉化後對x座標和y座標分別統計排序和求和 求字首和預處理 二分 1 include2 using namespace std 3 define n 100005 4struct jia n 7in...

生日聚會 BZOJ 1037

生日聚會 問題描述 今天是hidadz小朋友的生日,她邀請了許多朋友來參加她的生日party。hidadz帶著朋友們來到花園中,打算坐成一排玩遊戲。為了遊戲不至於無聊,就座的方案應滿足如下條件 對於任意連續的一段,男孩與女孩的數目之差不超過k。很快,小朋友便找到了一種方案坐了下來開始遊戲。hidad...

《騎士聚會》問題解答

在 程式設計師 第九期演算法擂台中看到這個題目,在這兒給出我的解答方案。題目要求 求出某一點,使所有的騎士到這一點的時間最短 在保證時間最短的情況的下,所有的騎士到這點的路程之和也最短。解題思路 1.先求出每個騎士從開始的位置到任意乙個位置的所需要的最少的天數,儲存在二維陣列days max y m...