【bzoj2435】[NOI2011]道路修建
题目描述
在 W 星球上有 n 个国家。为了各自国家的经济发展,他们决定在各个国家之间建设双向道路使得国家之间连通。但是每个国家的国王都很吝啬,他们只愿意修建恰好 n – 1条双向道路。 每条道路的修建都要付出一定的费用, 这个费用等于道路长度乘以道路两端的国家个数之差的绝对值。例如,在下图中,虚线所示道路两端分别有 2 个、4个国家,如果该道路长度为 1,则费用为1×|2 – 4|=2。图中圆圈里的数字表示国家的编号。
.jpg)
由于国家的数量十分庞大,道路的建造方案有很多种,同时每种方案的修建费用难以用人工计算,国王们决定找人设计一个软件,对于给定的建造方案,计算出所需要的费用。请你帮助国王们设计一个这样的软件。
输入
输入的第一行包含一个整数n,表示 W 星球上的国家的数量,国家从 1到n编号。
接下来 n – 1行描述道路建设情况,其中第 i 行包含三个整数ai、bi和ci,表示第i 条双向道路修建在 ai与bi两个国家之间,长度为ci。
输出
输出一个整数,表示修建所有道路所需要的总费用。
样例输入
6
1 2 1
1 3 1
1 4 2
6 3 1
5 2 1
样例输出
20
提示
n = 1,000,000 1≤ai, bi≤n
0 ≤ci≤ 10^6
题解
这题难点在于求节点个数。
由于这是一棵树,每个非根节点与其父节点的连线即为题目中要修建的道路。
于是可以初始化一下每个非根节点与其父节点连线的权值,并递推出每个节点的子树大小size,然后每条道路两端国家个数就为size-(n-size)=2*size-n。
由于栈的限制,普通的dfs树形dp会爆栈,所以采用bfs。
#include <stdio.h>
#include <string.h>
using namespace std;
int head[1000001] , to[2000003] , next[2000003] , cnt = 1 , fa[1000001] , q[1000001] , qh = 1 , qt = 1 , si[1000001] , val[2000003] , v[1000001];
long long ans;
inline int read()
{
int num = 0; char ch = getchar();
while(ch < '0' || ch > '9') ch = getchar();
while(ch >= '0' && ch <= '9') num = num * 10 + ch - '0',ch = getchar();
return num;
}
void add(int x , int y , long long z){to[cnt] = y; val[cnt] = z; next[cnt] = head[x]; head[x] = cnt ++ ;}
int abs(int x){return x > 0 ? x : -x;}
int main()
{
int n , i , x , y , z;
n = read();
for(i = 1 ; i < n ; i ++ )
{
x = read();
y = read();
z = read();
add(x , y , z);
add(y , x , z);
}
q[1] = 1;
fa[1] = -1;
while(qh <= qt)
{
x = q[qh ++ ];
for(i = head[x] ; i ; i = next[i])
{
y = to[i];
if(!fa[y])
{
q[ ++ qt] = y;
fa[y] = x;
si[y] = 1;
v[y] = val[i];
}
}
}
for(i = qt ; i >= 2 ; i -- )
{
x = q[i];
si[fa[x]] += si[x];
ans += (long long)v[x] * abs(2 * si[x] - n);
}
printf("%lld\n" , ans);
return 0;
}
【bzoj2435】[NOI2011]道路修建的更多相关文章
- BZOJ2435:[NOI2011]道路修建 (差分)
Description 在 W 星球上有 n 个国家.为了各自国家的经济发展,他们决定在各个国家 之间建设双向道路使得国家之间连通.但是每个国家的国王都很吝啬,他们只愿 意修建恰好 n – 1条双向道 ...
- BZOJ2435 [Noi2011]道路修建 【树形Dp 吧。。】
题目 在 W 星球上有 n 个国家.为了各自国家的经济发展,他们决定在各个国家 之间建设双向道路使得国家之间连通.但是每个国家的国王都很吝啬,他们只愿 意修建恰好 n – 1条双向道路. 每条道路的修 ...
- BZOJ2435 NOI2011道路修建
要多简单有多简单.然而不知道为啥在luogu上过不掉. #include<iostream> #include<cstdio> #include<cmath> #i ...
- 【题解】 bzoj2435: [Noi2011]道路修建 (傻逼题)
bzoj2435,懒得复制,戳我戳我 Solution: 模拟即可(有点傻逼啊 Code: //It is coded by Ning_Mew on 5.13 #include<bits/std ...
- BZOJ2435——[Noi2011]道路修建
1.题意:给个树,边的权值=两边的点数差*此边的长度,求所有边的权值和 2.分析:真不想说啥了...dfs即可 #include <cmath> #include <cstdio&g ...
- BZOJ2435: [Noi2011]道路修建
这种水题真是……没一次AC都不好意思见人啊 P.S. LINUX无限栈真是爽炸了… 我爱递归 /**************************************************** ...
- 【DFS】bzoj2435 [Noi2011]道路修建
两遍DFS.第一遍统计以每个点为根的子树大小,第二遍更新答案. #include<cstdio> #include<iostream> using namespace std; ...
- 【BZOJ-2435】道路修建 (树形DP?)DFS
2435: [Noi2011]道路修建 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3115 Solved: 1002[Submit][Statu ...
- bzoj 2435: [Noi2011]道路修建 树上 dp
2435: [Noi2011]道路修建 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/pr ...
- NOI2011道路修建
2435: [Noi2011]道路修建 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1974 Solved: 550[Submit][Status ...
随机推荐
- C#常用异常类记录
从MSDN抄下来的 ArgumentException 传递到方法的非空参数是无效的. ArgumentNullException 传递给方法的参数为空. ArgumentOutOfRangeExc ...
- zabbix 3.0快速安装简介(centos 7)
zabbix快速安装 系统版本:centos 7 通过yum方法安装Zabbix3.0,安装源为阿里云 yum源配置 rpm -ivh http://mirrors.aliyun.com/zabbix ...
- C#编写滤镜 图片色调取反效果(Invert)
转自:http://www.it165.net/pro/html/201208/3469.html Invert 英文叫做颠倒.. 原理很简单也就是 将 255- 原本的值.. 这样 0(黑) 就会变 ...
- tail 命令 查看Tomcat目录下日志的最后几行的方法
工作中需要查看日志信息,进行排错,但是面对上万行的错误日志,从头开始往后看,比较浪费时间,所有使用tail命令会节省不少时间. 1.命令 tail - n opt/tomcat/logs/ca ...
- Interface/接口
1. 类和结构能够实现接口 2. 接口声明包含如下四种类型:属性.方法.事件和索引:这些函数声明不能包含任何实现代码,而在每一个成员的主体后必须使用分号 3. 继承接口的类或结构必须实现接口中的所有成 ...
- angularjs笔记(二)
AngularJS API 4.AngularJS过滤器 使用一个管道符(|)添加到表达式和指令中 例1.格式化字母转为大写 <!DOCTYPE html> <html> &l ...
- Java数据库——使用元数据分析数据库
在JDBC中提供了DatabaseMetaData和ResultSetMetaData接口来分析数据库的元数据. DatabaseMetaData 使用DatabaseMetaData取得数据库的元信 ...
- C#----对时间结构DateTime的使用(时间日期的使用)
1.其初始化时间是0001--0--0 0:0:0 class Program { DateTime dt; static void Main(string[] args) { Program pp ...
- Bindless Textures
http://shikihuiku.wordpress.com/2014/02/10/openglのtextureについて/
- netstat--查看服务器[有效]连接数--统计端口并发数--access.log分析
简介 Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Member ...