比賽 樹 排序 猴猴吃蘋果

2022-08-13 21:21:17 字數 1119 閱讀 1486

多畫圖多畫圖多畫圖!

發現輸出的都是以k為根的葉子節點。

1.先按以k為根,進行dfs處理。

2.按照節點深度及編號對節點排序,深度越大排序越靠前,深度相同時,編號小的排在前面。

3.依次處理每個節點 ,每次向上蹦,如果碰到以走過的節點或根節點就停止,記錄走過的步數。

4.按照走過的步數及編號,對節點做第二次排序,得到的結果即為答案。

這道題中的順序很關鍵

然後查bug的時候發現,二維排序的時候要記得把關鍵字一條條列出來......

#include#include

#include

using

namespace

std;

intn,fr;

const

int n=5e4+3

;int

tot,head[n];

int ev[n<<1],enx[n<<1

];void add(int u,int

v)int

dep[n],fa[n];

void dfs(int rt,int

f)int

stp[n];

bool

vis[n];

void count(int rt,int

st)bool cmp1(int a,int

b)bool cmp2(int a,int

b)int

xl[n];

intmain()

dfs(fr,0);

sort(xl+1,xl+n+1

,cmp1);

for(int i=1;i)

sort(xl+1,xl+n+1

,cmp2);

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

if(stp[xl[i]])

printf(

"%d\n

",xl[i]-1

);

else

break

;

return0;

}

11 02 猴猴吃蘋果

走過的點的權值清零,那麼答案是唯一的,而且終點一定會是葉子節點 那麼我們設初始節點為根節點,先遍歷一次樹,把所有葉子節點記錄下來,以及每個點的父節點,按照深度排序 然後讓每個點沿著父親往上跳,每跳一步答案增加1,遇到根節點或者走過的節點就停止 遇到走過的點說明上面的點取過值了 include def...

11 02 猴猴的比賽

猴猴今天要和小夥伴猩猩比賽爬樹,為了公平不碰撞,猴猴和猩猩需要在不同的樹上攀爬。於是它們選了兩顆節點數同為n的樹,並將兩棵樹的節點分別以1 n標號 根節點標號為1 但兩棵樹的節點連線方式不盡相同。現在它們決定選擇兩個標號的點進行比賽。為了方便統計,規定它們比賽中必須都向上爬。即選定的賽段節點u 節點...

51nod 猴猴的比賽

h yp erli nk hyperlink hyperl ink d es crip tion description descri ptio n 給定兩棵樹,求在兩棵樹同時滿足u uu是v vv的父親的對數 資料範圍 n 1 05 n leq 10 5 n 105sol utio nsoluti...