——>點我跳轉<——
有乙個圖,要從一號節點出發經過所有點回到一號節點。
要你在走過的路最少的前提下,讓總距離最短。
首先,它要求路過所有的點,然後要走過的路最小。
因為道路雙向,那我們可以原路返回(先不考慮距離的問題)。那我們可以想到至少要 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,...