題解 逐個擊破 luogu2700

2021-08-21 21:18:37 字數 1113 閱讀 1724

現在有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 卻少有人想到。我們...