给出 n 个城市的坐标 xi,yi,有 m 个城墙,第 ui 个城市和第 vi 个城市之间是一道城墙,破坏该城墙需要 wi 的花费,问使得整个图中无环的最小花费
向反方向考虑,使得剩余城墙数量尽量的多,且剩余城墙破坏价值尽量的大,求该图的最大生成树
const int N=2e5+5;
int n,m,t;
int i,j,k;
int fa[N];
struct node
{
int u,v,w;
bool operator<(node &b){
return w>b.w;
}
}G[N];
int Find(int x)
{
if(fa[x]==x) return x;
return fa[x]=Find(fa[x]);
}
int main()
{
//IOS;
while(sdd(n,m)==2){
int x,y,sum=0;
for(i=1;i<=n;i++) sdd(x,y);
for(i=1;i<=m;i++){
sdd(G[i].u,G[i].v);
sd(G[i].w);
sum+=G[i].w;
}
sort(G+1,G+1+m);
for(i=1;i<=n;i++) fa[i]=i;
int ans=0,num=0;
for(i=1;i<=m;i++){//枚举那些留着
int u=G[i].u;
int v=G[i].v;
int w=G[i].w;
u=Find(u);
v=Find(v);
if(u==v) continue;
ans+=G[i].w;
num++;
fa[u]=v;
}
pdd(m-num,sum-ans);
}
return 0;
//PAUSE;
}