Description

在 W 星球上有 n 个国家。为了各自国家的经济发展,他们决定在各个国家
之间建设双向道路使得国家之间连通。但是每个国家的国王都很吝啬,他们只愿
意修建恰好 n – 1条双向道路。 每条道路的修建都要付出一定的费用, 这个费用等于道路长度乘以道路两端的国家个数之差的绝对值。例如,在下图中,虚线所示道路两端分别有 2 个、4个国家,如果该道路长度为 1,则费用为1×|2 – 4|=2。图中圆圈里的数字表示国家的编号。


由于国家的数量十分庞大,道路的建造方案有很多种,同时每种方案的修建
费用难以用人工计算,国王们决定找人设计一个软件,对于给定的建造方案,计
算出所需要的费用。请你帮助国王们设计一个这样的软件。

Input

输入的第一行包含一个整数n,表示 W 星球上的国家的数量,国家从 1到n
编号。接下来 n – 1行描述道路建设情况,其中第 i 行包含三个整数ai、bi和ci,表
示第i 条双向道路修建在 ai与bi两个国家之间,长度为ci。

Output

输出一个整数,表示修建所有道路所需要的总费用。

Sample Input

6 
1 2 1
1 3 1
1 4 2
6 3 1
5 2 1

Sample Output

20

Hint

n = 1,000,000 1≤ai, bi≤n

0 ≤ci≤ 10^6

题意:Σ(边的权值*abs(左边点的个数-右边点的个数))
 
题解:dfs处理 邻接表或vector存图
  n个点n-1条边 找个任意点为根,dfs 得到以该点为子树的树的大小k 
  Σ(边的权值*abs(k-(n-k)))
 #include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#define ll long long
using namespace std;
struct node
{
int pre;
int to;
int w;
}N[];
int nedge=;
int pre[];
int n;
int used[];
int s[];
ll ans=;
void add(int a,int b,int c)
{
nedge++;
N[nedge].to=b;
N[nedge].w=c;
N[nedge].pre=pre[a];
pre[a]=nedge;
}
int ab(int x)
{
if(x<)
return -x;
return x;
}
void dfs(int xx)
{
s[xx]=;
for(int i=pre[xx];i;i=N[i].pre)
{
if(!used[N[i].to])
{
used[N[i].to]=;
dfs(N[i].to);
s[xx]+=s[N[i].to];
ans=ans+(ll)N[i].w*ab(s[N[i].to]-(n-s[N[i].to]));
//cout<<"!!!"<<N[i].w<<" "<<s[xx]<<" "<<n-s[xx]<<endl;
}
}
}
int aa,bb,cc;
int main()
{
while(scanf("%d",&n)!=EOF)
{
memset(used,,sizeof(used));
nedge=;
ans=;
memset(pre,,sizeof(pre));
memset(s,,sizeof(s));
for(int i=;i<n;i++)
{
scanf("%d %d %d",&aa,&bb,&cc);
add(aa,bb,cc);
add(bb,aa,cc);
}
used[]=;
dfs();
printf("%lld\n",ans);
}
return ;
}
 

最新文章

  1. bzoj 3438: 小M的作物
  2. Mac &#19978;&#30495;&#27491;&#26367;&#25442;LiveWriter &#30340;&#24037;&#20855; - ecto
  3. Hibernate的一级二级缓存机制配置与测试
  4. gdb调试,自动显示多个变量的值
  5. Linux常用性能检测命令解释
  6. 2016- 1- 16 NSThread 的学习
  7. http://www.cnblogs.com/eye-like/p/4121219.html
  8. 协助ScriptCase7.1做些汉化矫正工作
  9. DOM Style样式对象的详细用法
  10. C# Winform 界面线程的Invoke死锁,以及Application.DoEvent的问题
  11. Setting up Ubuntu in CoLinux–changing local/keyboard to be English
  12. Redis学习-内存优化
  13. 【Zabbix】CentOS6.9系统下部署Zabbix-agent
  14. 【VBA】ExcelファイルのOpen
  15. ASP.NET JSON(转http://www.360doc.com/content/14/0615/21/18155648_386887590.shtml)
  16. flask连接数据库mysql+SQLAlchemy
  17. Java Message Service学习(一)
  18. 在ASP.NET MVC中使用Knockout实践04,控制View Model的json格式内容
  19. Java并发编程原理与实战二十:线程安全性问题简单总结
  20. 20181009-2 选题 Scrum立会报告+燃尽图(01)

热门文章

  1. vs2015“当前不会命中断点 还没有为该文档加载任何符号”的解决方法
  2. C# sizeof运算符
  3. c语言中--typeof--关键字用法
  4. Spring Cloud学习介绍
  5. Microsoft .Net framework 4.0出现 安装不成功,错误代码0x80240037 的解决方法
  6. MySQL详细安装过程
  7. Linux入门-第九周
  8. 第二篇:ssh.invoke_shell() 切换root出现的新问题
  9. yii2初步讲解 验证规则
  10. HDU 6228 tree 简单思维树dp