这个也是一个板子题目,题目的要求就是一颗最小生成树,
#include <iostream>
#include <string>
#include <cstdio>
#include <algorithm>
#include <queue>
using namespace std;
const int maxn=1000+100;
struct note
{
int u;
int v;
int cost;
bool operator <(const note &p) const
{
return cost<p.cost;
}
}aa[maxn*maxn];
int c[maxn];
int t;
int n,m;
void init()
{
for(int i=0;i<=n;i++)
c[i]=i;
}
int found(int x)
{
if(x==c[x]) return x;
else return c[x]=found(c[x]);
}
void unit(int x,int y)
{
x=found(x);
y=found(y);
if(x==y) return;
c[x]=y;
}
bool same(int x,int y)
{
return found(x)==found(y);
}
int main()
{
scanf("%d",&t);
while(t--)
{ int ans=0,sum=0;
scanf("%d%d",&n,&m);
init();
for(int i=0;i<m;i++)
{
scanf("%d%d%d",&aa[i].u,&aa[i].v,&aa[i].cost);
ans+=aa[i].cost;
}
sort(aa,aa+m);
for(int i=0;i<m;i++)
{
note nn=aa[i];
if(!same(nn.u,nn.v))
{
//printf("-----\n");
unit(nn.u,nn.v);
sum+=nn.cost;
}
}
//printf("%d %d\n",c[0],c[1]);
printf("%d\n",ans-sum);
}
return 0;
}