BZOJ 2435 [Noi 2011] 树DP 解题报告
来源:互联网 发布:淘宝蚂蚁摄影怎么样 编辑:程序博客网 时间:2024/06/05 06:48
2435: [Noi2011]道路修建
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
【解题报告】
希望NOI多考考这种水题
代码如下:
/************************************************************** Problem: 2435 User: onepointo Language: C++ Result: Accepted Time:7156 ms Memory:94312 kb****************************************************************/#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#include<stack>using namespace std;#define N 1000010#define LL long longint n;LL ans;int cnt,head[N],size[N];struct Edge{int to,nxt;LL w;}e[N<<1];void adde(int u,int v,LL w){ e[++cnt].to=v;e[cnt].w=w; e[cnt].nxt=head[u];head[u]=cnt; e[++cnt].to=u;e[cnt].w=w; e[cnt].nxt=head[v];head[v]=cnt;}void dfs(int u,int fa){ size[u]=1; for(int i=head[u];~i;i=e[i].nxt) { int v=e[i].to; if(v==fa) continue; dfs(v,u); size[u]+=size[v]; ans+=e[i].w*(LL)abs(n-(size[v]<<1)); }}int main(){ cnt=-1;ans=0; memset(head,-1,sizeof(head)); scanf("%d",&n); for(int i=1;i<n;++i) { int u,v;LL w; scanf("%d%d%lld",&u,&v,&w); adde(u,v,w); } dfs(1,1); printf("%lld\n",ans); return 0;}
阅读全文
0 0
- BZOJ 2435 [Noi 2011] 树DP 解题报告
- bzoj 1566 NOI 2009 管道取珠 DP 解题报告
- BZOJ 4198 [Noi 2015] Huffman树 解题报告
- BZOJ 3671 [Noi 2014] 贪心 解题报告
- BZOJ 2005 [Noi 2010] 数论 解题报告
- BZOJ 1907 树DP 解题报告
- BZOJ 3727 PA2014 树DP 解题报告
- BZOJ 1820 DP 解题报告
- BZOJ 1566 DP 解题报告
- BZOJ 1419 DP 解题报告
- BZOJ 1562 [NOI 2009] 二分图 解题报告
- NOI 1192 加分二叉树 解题报告
- BZOJ 1040 [ZJOI 2008] 树DP 解题报告
- BZOJ 4033 [HAOI 2015] 树DP 解题报告
- BZOJ 4726 [POI 2017] 树DP 解题报告
- BZOJ 5072 [Lydsy 十月月赛] 树DP 解题报告
- BZOJ 1833 数位DP 解题报告
- BZOJ 1264 树状数组+DP 解题报告
- OCILIB 连接Oracle数据库——注意事项
- SAP HANA 平台介绍
- linux下执行mysql时报错:unknown variable 'default-character-set=utf8'
- 实现表格的增删改查
- RNN-循环神经网络-02Tensorflow中的实现
- BZOJ 2435 [Noi 2011] 树DP 解题报告
- asynctask的使用
- 在eclipse中通过gradle项目管理工具导入spring framework源码
- 关于java中BigDecimal应用场景和用法
- 【19】深入理解 JavaScript 中的函数
- js调用微信原生接口(扫码)和调用微信打卡数据的时候注意事项
- 《爆裂鼓手》
- Android设备获取扫码枪扫描内容
- 陶哲轩的数学题