多畫圖多畫圖多畫圖!
發現輸出的都是以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...