B

来源:互联网 发布:苹果cms西瓜播放器 编辑:程序博客网 时间:2024/05/02 00:46

这个也是一个板子题目,题目的要求就是一颗最小生成树,

#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;}