POJ 1849 樹的直徑 Two

2022-05-22 09:12:13 字數 930 閱讀 8998

如果乙個點開始遍歷一棵樹再回到原點那麼每條邊走兩次。

現在是兩個人從同一點出發,那麼最後遍歷完以後兩人離得越遠越好。

最後兩人所處位置的路徑上的邊走了一次,其他邊走了兩次。

要使總路程最小,兩人最後停在直徑兩端。

所以最終答案就是總權值*2 - 樹的直徑

1 #include 2 #include 3 #include 4 #include 5 #include 6

using

namespace

std;78

const

int maxn = 100000 + 10;9

10int

n, s;

11 vectorg[maxn], c[maxn];

1213

intlen, id;

1415

void dfs(int u, int fa, int

d)16

18for(int i = 0; i < g[u].size(); i++)

1924}25

26int

main()

2731

32int sum = 0;33

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

3440

41int

a;42 len = -1

;43 dfs(1, 0, 0

);44 len = -1

;45 a =id;

46 dfs(a, 0, 0

);47

48 printf("

%d\n

", sum -len);49}

5051

return0;

52 }

**君

POJ1849 Two(樹的直徑)

題意 有一顆n個結點的帶權的無向樹,在s結點放兩個機械人,這兩個機械人會把樹的每條邊都走一遍,但是最後機械人不要求回到出發點.問你兩個機械人走的路總長之和的最小值是多少?思路 考慮從乙個結點遍歷整個樹再回到原點需要把每個邊計算兩遍,這裡機械人不用回到出發點,所以兩個機械人到達的點越遠越好。讓兩個機械...

poj 1849 貪心 樹形dp

題意是 在m點有兩輛車,要清掃所有的路,問走的最短路。題目鏈結 和poj1935 差不多,poj 1935 是乙個人走的最短路。題解 所有邊權和 2 樹的最長路徑。樹形dp的解法不會,include include include includeusing namespace std define ...

poj 1985 樹的直徑

題意 求樹的直徑。樹的直徑即樹上距離最遠的兩個點之間的距離 思路 以任意點開始深搜,得到距離其最遠的點 再以求得的點開始深搜,再次搜得的最遠距離即為樹的直徑 include include define n 100005 struct edgee n 2 int first n flag n top...