現在有n個城市,其中k個被敵方軍團占領了,n個城市間有n-1條公路相連,破壞其中某條公路的代價是已知的。
現在,告訴你k個敵方軍團所在的城市,以及所有公路破壞的代價,請你算出花費最少的代價將這k個地方軍團互相隔離開,以便第二步逐個擊破敵人。
第一行包含兩個正整數n和k。
第二行包含k個整數,表示哪個城市別敵軍占領。
接下來n-1行,每行包含三個正整數a,b,c,表示從a城市到b城市有一條公路,以及破壞的代價c。城市的編號從0開始。
輸出一行乙個整數,表示最少花費的代價。
輸入
5 3
1 2 4
1 0 4
1 3 8
2 1 1
2 4 3
輸出
4
#include
#include
#include
#include
using
namespace
std;
int n,m;
long
long ans;
int vis[100010],fa[100010];
struct arre[100010];
inline
int read()
int gf(int x)
inline
int cmp(arr a,arr b)
int main()
for(int i=1;iint u=read(),v=read(),w=read(); e[i].u=u;e[i].v=v;e[i].w=w; ans+=w;
}sort(e+1,e+n,cmp);
for(int i=1;i<=n;i++) fa[i]=i;
for(int i=1;iint f1=gf(e[i].u);
int f2=gf(e[i].v);
if(!(vis[f1]&&vis[f2]))
}printf("%lld\n",ans);
}
P2700 逐個擊破
一開始以為題很難,當我坐下來認真讀題後,卻神奇地發現這道題很水 這和kruskal有什麼區別啊?於是我開開心心地十五分種敲完了 然後我就wa了 emmm 尷尬 一開始我對於每乙個點的no值都進行維護,時間複雜度特別高,於是就wa了qwq 後來我發現,其實一顆樹只要維護乙個no,即根結點的no即可,這...
C 難點逐個擊破(1) ref引數傳遞
一般情況,方法的引數傳遞是通過值進行傳遞的,即乙個物件作為引數傳遞給方法使用,該物件便進駐到該引數物件所在指標的記憶體空間 使用c來描述 也就是該物件在此位置程式設計客棧建立了副本,當方法執行結束時,該副本將會被銷毀 這種傳遞方式的使用佔據了日常方法傳參的絕大多數。另一種情況是引用傳遞,它與值傳遞方...
第二節 線性表 順序表 鍊錶 逐個擊破
一.線性表 1.前言 線性表,全名為線性儲存結構。使用線性表儲存資料的方式可以這樣理解,即 把所有 一對一邏輯關係的 資料用一根線兒串 起來,再儲存到物理空間中 這根線有兩種串聯形式,如下圖,即順序儲存 集中存放 和鏈式儲存 分散存放 圖 3a 是多數人想到的儲存方式,而圖 3b 卻少有人想到。我們...