LG#P2700. 逐个击破

提交2 通过1
通过率50%
时间限制2000ms
内存限制512MiB
    ID: 12139 传统题 2000ms 512MiB 尝试: 2 已通过: 1 难度: 普及+/提高- 上传者: 标签>GESPGESP强化C++c++编程题最小生成树最大生成森林并查集

题目描述

题目描述

在平津战场上,敌军沿着以北平、天津为中心的铁路摆成一条绵长防线,并准备在形势不利时分别向东西两侧撤退。为了阻断退路、避免各部敌军互相支援,指挥部决定先切断关键交通线,使各处敌军彼此隔离,再分别展开进攻。

现在的战场被抽象为 NN 座城市和 N1N-1 条双向公路。任意两座城市之间原本都能互相到达,因此整个公路网是一棵树。共有 KK 座城市被敌方军团占领,每座被占领城市中有一支需要单独处理的军团。

破坏每条公路都要付出给定代价。你需要选择若干条公路将其破坏,使剩余道路中任意两座被敌军占领的城市之间都不存在通路,也就是每个剩余连通区域至多包含一支敌方军团。在完成隔离的前提下,请让被破坏公路的总代价尽可能小。

输入格式

第一行包含两个整数 N,KN,K,分别表示城市数量和被敌军占领的城市数量。

第二行包含 KK 个互不相同的整数,表示被敌军占领的城市编号。

接下来 N1N-1 行,每行包含三个整数 a,b,ca,b,c,表示城市 aa 与城市 bb 之间有一条双向公路,破坏这条公路的代价为 cc。城市编号从 00 开始。

输出格式

输出一行一个整数,表示使所有敌军城市两两隔离所需的最小总代价。

5 3
1 2 4
1 0 4
1 3 8
2 1 1
2 4 3
4

样例说明 #1

选择代价合计为 44 的道路进行破坏即可使三座敌军城市互不连通。

2 2
0 1
0 1 9
9

样例说明 #2

两座城市都被占领,只能破坏它们之间唯一的道路。

4 2
0 3
0 1 5
1 2 2
2 3 7
2

样例说明 #3

比较保留高代价道路所形成的连通块,可以只破坏代价较小的必要道路。

数据范围与约定

对于 10%10\% 的数据,N10N\le 10

对于全部数据,2N1052\le N\le 10^52KN2\le K\le N0a,b<N0\le a,b<N1c1061\le c\le 10^6。输入的 N1N-1 条公路保证构成一棵树,被占领城市互不相同。