天空之城有5個小鎮,名字分別為ada, aed, akk, orz, apq,他們也有相互的路徑長度。
希達早已期盼著天空之城,如今她登上了天空之城,就想走遍天空之城的每乙個城市,但是她希望自己走的路的長度越小越好,以節省體力和節約時間。
巴魯同意了,但由於他是主力(男孩子嘛),需要幫希達計算出走遍所有城市的最短路徑長度。
由於天空之城具有魔力,如果希達想再走一次自己之前走過的路,則她可以在這條路上不花費任何時間。
但是天空之城的城市太多了,他實在計算不過來,只得請你來幫幫忙了。
第一行,輸入n,q, 表示有n個城市,q條邊;
第二行,輸入乙個名字tmp,表示希達想要從tmp城市開始行走;
接下來q行,每行輸入兩個名字a,b和乙個數字val, 表示a城市與b城市之間的距離為val.(注意可能有重邊和自環)
幫助巴魯計算出最短的路徑長度,如果無法走遍所有城市,輸出「no!」。
輸入
5 5orz
ada aed 5
orz ada 6
apq aed 8
akk apq 12
aed orz 3
輸出
28說明
ada->aed->orz->aed->apq->akk
備註:
多組輸入輸出(以eof結束),保證資料組數不超過 10 。
1 <= n <= 5000, 1 <= q <= 200000, 1 <= val <= 1e9. 每個城市的名字長度不超過10。
保證∑q≤200000 。
最小生成樹模板題用map把string轉換到數上(map mp),然後即是n 個點 m 條邊的最小生成樹模板題。
最小生成樹模板**:
最小生成樹之kruskal演算法
最小生成樹之prim演算法
#include
#include
#include
#include
#include
using
namespace std;
#define ll long long
map int> mp;
int n,m,cnt=0;
string s;
struct nodea[
200010];
int pre[
10010];
bool
cmp(node a,node b)
intfind
(int x)
return pre[x];}
void
merge
(int x,
int y)
intmain()
sort
(a+1
,a+1
+m,cmp)
;for
(int i=
1;i<=n;i++
) pre[i]
=i; ll ans=0;
int num=0;
for(
int i=
1;i<=m;i++)}
if(numprintf
("no!\n");
else
printf
("%lld\n"
,ans);}
return0;
}
2021牛客寒假演算法基礎集訓營3
三場牛客下來覺得自己越來越不在狀態,思路不清晰,一下手就是bug,每調完一題刷下榜都被甩開十里地,罰時慘不忍睹 傳送門 簽到 include using namespace std typedef long long ll const ll inf 0x3f3f3f3f const ll mod 1...
2021牛客寒假演算法基礎集訓營1
題目描述 請你構造乙個非空的括號字串,包含正好 k 個不同合法括號對。所謂括號字串,是指由 和 這兩種字元構成的字串。要求構造的字串長度不超過100000。輸入描述 乙個整數 k。乙個整數 kk。0 k 1e9 輸出描述 乙個僅包含左右括號字串,其中有 kk 個合法的括號對。如果有多種構造方法,輸出...
2021牛客寒假演算法基礎集訓營6
思路 k1排k2前面滿足 k1.a k2.ax k2.b k1.b k1.ax k1.b k2.b k2.ak1.b k2.b k1.a k2.a k1.b include define ull unsigned long long define ll long long const int inf...