思路:

利用克鲁斯卡尔算法,最小生成树把边从小到大排序,然后Union;

最大生成树就是把边从大到小排序,然后Union;

#include<bits/stdc++.h>
using namespace std;
typedef __int64 LL; const int N=15000;
struct asd{
int u,v;
int w;
};
asd q[N];
int pre[N],n,num; bool cmp(asd x,asd y)
{
return x.w<y.w;
} void init()
{
for(int i=0;i<=n;i++)
pre[i]=i;
} int Find(int x)
{
int r=x;
while(pre[r]!=r)
r=pre[r];
int i=x,j;
while(pre[i]!=r)
{
j=pre[i];
pre[i]=j;
i=j;
}
return r;
} int max_tree()
{
int ans=0;
init();
for(int i=num-1;i>=0;i--)
{
int aa=Find(q[i].u);
int bb=Find(q[i].v);
if(aa!=bb)
{
pre[aa]=bb;
ans+=q[i].w;
}
}
return ans;
} int min_tree()
{
int ans=0;
init();
for(int i=0;i<num;i++)
{
int aa=Find(q[i].u);
int bb=Find(q[i].v);
if(aa!=bb)
{
pre[aa]=bb;
ans+=q[i].w;
}
}
return ans;
} int main()
{
int T,cas=1;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
num=0;
int a,b,c;
while(scanf("%d%d%d",&a,&b,&c))
{
if(!a&&!b&&!c) break;
q[num].u=a;
q[num].v=b;
q[num].w=c;
num++;
}
sort(q,q+num,cmp);
int q,p;
q=max_tree()+min_tree();
if(q%2)
printf("Case %d: %d/2\n",cas++,q);
else
printf("Case %d: %d\n",cas++,q/2);
}
return 0;
}

最新文章

  1. Reverse Linked List | &amp; ||
  2. PhoneGap,Cordova[3.5.0-0.2.6]:利用插件Cordova-SQLitePlugin来操作SQLite数据库
  3. Android实例-全屏显示程序(XE10+小米2)(无图)
  4. 解决ie8不兼容jquery trim问题
  5. CodeViz产生函数调用图
  6. HDUJ 1754 I Hate It
  7. java特权制度设计篇
  8. Arch安装KDE5
  9. Mysql--单表数据记录查询
  10. 基于Three.js的360度全景--photo-sphere-viewer--简介
  11. sed 修改文本
  12. 有关 Azure 机器学习的 Net# 神经网络规范语言的指南
  13. .net core 下编码问题
  14. Control4系统对接arduino
  15. bat 复制文件夹,文件名递增 等操作
  16. ABP框架系列之五十:(Swagger-UI-集成)
  17. 排序基础之非比较的计数排序、桶排序、基数排序(Java实现)
  18. 《EMCAScript6入门》读书笔记——24.编程风格
  19. golang模拟动态高优先权优先调度算法
  20. Unity3D-实现连续点击两次返回键退出游戏(安卓/IOS)

热门文章

  1. 【MatConvNet】配置GPU
  2. 辛星浅析html5中的role属性
  3. [省选]板块(shenben已经AFO!!!)
  4. Delphi类的默认区域
  5. STL之队列的运用
  6. 用ASTERISK搭建自己的免费VOIP服务器
  7. windows定时计划备份MySql
  8. Android 6.0 如何默认打开user版本的root权限【转】
  9. Codeforces Round #379 (Div. 2) E. Anton and Tree —— 缩点 + 树上最长路
  10. BestCoder7 1001 Little Pony and Permutation(hdu 4985) 解题报告