nowcoder 217603 路線規劃

2021-10-17 09:03:03 字數 1036 閱讀 7121

——>點我跳轉<——

有乙個圖,要從一號節點出發經過所有點回到一號節點。

要你在走過的路最少的前提下,讓總距離最短。

首先,它要求路過所有的點,然後要走過的路最小。

因為道路雙向,那我們可以原路返回(先不考慮距離的問題)。那我們可以想到至少要 n−1

n-1n−

1 個點,才可以把 n

nn 個點遍歷一遍,那其實就是一棵樹。

現在我們已經知道了邊的數量,我們就是要看距離了。

那我們考慮已經知道了樹,看距離怎麼求。那其實就是乙個尤拉序,想跑 dfs 乙個圖一樣,每條邊分別過去和回來。就是每條邊都經過兩次,那距離就是樹上每條邊的長度的和的兩倍。

那你怎麼讓樹上每條邊的距離的和最小呢?

沒錯,最小生成樹。

#include

#include

using

namespace std;

struct node a[

2000001];

int n, m, fa[

200001

], num, x, y;

long

long ans;

bool

cmp(node x, node y)

intfind

(int now)

void

connect

(int x,

int y)

intmain()

for(

int i =

1; i <= n; i++

) fa[i]

= i;

sort

(a +

1, a + m +

1, cmp)

;for

(int i =

1; i <= m; i++)}

printf

("%lld"

, ans *

2ll)

;//尤拉序,就是每個邊走兩遍

return0;

}

nowcoder 句子逆序

將乙個英文語句以單詞為單位逆序排放。例如 i am a boy 逆序排放後為 boy a am i 所有單詞之間用乙個空格隔開,語句中除了英文本母外,不再包含其他字元 介面說明 反轉句子 param sentence 原句子 return 反轉後的句子 public string reverse s...

nowcoder 雙棧佇列

編寫乙個類,只能用兩個棧結構實現佇列,支援佇列的基本操作 push,pop 給定乙個操作序列ope及它的長度n,其中元素為正數代表push操作,為0代表pop操作,保證操作序列合法且一定含pop操作,請返回pop的結果序列。測試樣例 1,2,3,0,4,0 6 返回 1,2 用兩個棧實現佇列。cla...

nowcoder 雙棧排序

請編寫乙個程式,按公升序對棧進行排序 即最大元素位於棧頂 要求最多只能使用乙個額外的棧存放臨時資料,但不得將元素複製到別的資料結構中。給定乙個int numbers c 中為vector 其中第乙個元素為棧頂,請返回排序後的棧。請注意這是乙個棧,意味著排序過程中你只能訪問到第乙個元素。測試樣例 1,...