社区讨论
30pts求调
P2700逐个击破参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @lq6rsyao
- 此快照首次捕获于
- 2023/12/15 23:14 2 年前
- 此快照最后确认于
- 2023/12/16 10:42 2 年前
CPP
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,k,ans;
bool city[100005];
struct edge{
int u,v,w;
}e[200005];
bool cmp(edge a,edge b){
return a.w>b.w;
}
int cnt;
void add(int u,int v,int w){
cnt++;
e[cnt].u=u;
e[cnt].v=v;
e[cnt].w=w;
}
int fa[100005];
int find(int x){
int r=x;
while(r!=fa[r]){
r=fa[r];
}
while(x!=r){
int c=x;
x=fa[x];
fa[c]=r;
}
return r;
}
signed main(){
cin>>n>>k;
for(int i=1;i<=k;i++){
int u;
cin>>u;
city[u]=true;
}
for(int i=0;i<=n;i++){
fa[i]=i;
}
for(int i=1;i<n;i++){
int u,v,w;
cin>>u>>v>>w;
ans+=w;
add(u,v,w);
}
sort(e+1,e+n+1,cmp);
for(int i=1;i<n;i++){
int u=e[i].u,v=e[i].v;
int fu=find(u),fv=find(v);
if(city[fu]&&city[fv]){
continue;
}
fa[u]=v;
ans-=e[i].w;
city[u]=city[v]=city[u]||city[v];
}
cout<<ans;
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...