uva 6437 - Power Plant【最小生成树】

来源:互联网 发布:类似知乎的app 编辑:程序博客网 时间:2024/06/06 01:58

题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=4448

题目大意:和基本的最小生成树想比,其在最开始的时候有多个起点,从任一起点开始生成都可以。

一直到最后才发现做法,就是把起始点都提前加入生成树里面。

#include<iostream>#include<stdio.h>#include<algorithm>using namespace std;#define maxn 205int T,N,M,K;int f[maxn];struct node{  int u,v,w;  bool operator<(const node &a)const  {      return w<a.w;  }}a[maxn];int find(int x){    return x==f[x]?x:f[x]=find(f[x]);}int kruscal(){    sort(a,a+M);    int sum=0;    for(int j=0;j<M;j++)    {        int x=find(a[j].u);        int y=find(a[j].v);        if(x!=y) sum+=a[j].w,f[y]=x;    }    return sum;}int main (){    int fa,tem;    scanf("%d",&T);    for(int ii=1;ii<=T;ii++)    {        scanf("%d%d%d",&N,&M,&K);        for(int i=0;i<=N;i++) f[i]=i;        scanf("%d",&fa);        for(int j=1;j<K;j++)        {            scanf("%d",&tem);            f[tem]=fa;        }        for(int j=0;j<M;j++)            scanf("%d%d%d",&a[j].u,&a[j].v,&a[j].w);        printf("Case #%d: %d\n",ii,kruscal());    }}


0 0
原创粉丝点击