2435: [Noi2011]道路修建

Time Limit: 10 Sec  Memory Limit: 128 MB
Submit: 2188  Solved: 639
[Submit][Status]

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

Source

Day2

题解:其实就是个搜索,由于题目中给了一棵树,所以直接建树,然后求出每个点有多少子孙(算自己)。。。本身应该不难的,但是对于P党问题来了——BFS嘛,搞死了还是超时(坑爹的int64运算简直慢到哭);DFS呵呵直接爆栈不解释(对于C++党的linux下系统栈无限表示严重鄙视!!TT传送门 ),于是我还是壮烈的TLE了,求神犇帮助(不过程序算法应该没有问题,就是int64害得......)

BFS:

 1 type
 2     point=^node;
 3     node=record
 4                g,w:longint;
 5                next:point;
 6     end;
 7 
 8 var
 9    i,j,k,l,m,n:longint;ll:int64;
10    a:array[0..1000000] of point;
11    c,b,d,e:array[0..1000500] of longint;
12    p:point;
13 procedure add(x,y,z:longint);inline;
14           var
15              p:point;
16           begin
17                new(p);
18                p^.g:=y;
19                p^.w:=z;
20                p^.next:=a[x];
21                a[x]:=p;
22           end;
23 procedure bfs1;inline;
24           var
25              p:point;f,r:longint;
26           begin
27                b[1]:=1;d[1]:=1;
28                f:=1;r:=2;
29                while f<r do
30                      begin
31                           p:=a[d[f]];
32                           while p<>nil do
33                                 begin
34                                      if b[p^.g]=0 then
35                                         begin
36                                              b[d[f]]:=2;
37                                              b[p^.g]:=1;
38                                              c[p^.g]:=d[f];
39                                              d[r]:=p^.g;
40                                              inc(r);
41                                         end;
42                                      p:=p^.next;
43                                 end;
44                           inc(f);
45                      end;
46           end;
47 begin
48      readln(n);
49      for i:=1 to n do a[i]:=nil;
50      for i:=1 to n-1 do
51          begin
52               readln(j,k,l);
53               add(j,k,l);
54               add(k,j,l);
55          end;
56      fillchar(b,sizeof(b),0);ll:=0;
57      fillchar(c,sizeof(c),0);fillchar(d,sizeof(d),0);
58      bfs1;ll:=0;
59      for i:=n downto 1 do
60          begin
61               e[d[i]]:=1;
62               p:=a[d[i]];
63               while p<>nil do
64                     begin
65                          if p^.g<>c[d[i]] then
66                             begin
67                                  ll:=ll+int64(abs(e[p^.g]-(n-e[p^.g])))*int64(p^.w);
68                                  e[d[i]]:=e[d[i]]+e[p^.g];
69                             end;
70                          p:=p^.next;
71                     end;
72          end;
73      writeln(ll);
74      readln; end.       

DFS:

 1 type
 2     point=^node;
 3     node=record
 4                g,w:longint;
 5                next:point;
 6     end;
 7
 8 var
 9    i,j,k,l,m,n:longint;ll:int64;
10    a:array[0..1000000] of point;
11    c,b:array[0..1000000] of longint;
12 procedure add(x,y,z:longint);inline;
13           var
14              p:point;
15           begin
16                new(p);
17                p^.g:=y;
18                p^.w:=z;
19                p^.next:=a[x];
20                a[x]:=p;
21           end;
22 procedure dfs(x:longint);inline;
23           var
24              p:point;
25           begin
26                if b[x]=1 then exit;
27                p:=a[x];b[x]:=1;
28                while p<>nil do
29                      begin
30                           if b[p^.g]=0 then
31                              begin
32                                   dfs(p^.g);
33                                   ll:=ll+int64(int64(abs(int64(c[p^.g])-int64(int64(n)-int64(c[p^.g]))))*int64(p^.w));
34                                   c[x]:=c[x]+c[p^.g];
35                              end;
36                           p:=p^.next;
37                      end;
38           end;
39 begin
40      readln(n);
41      for i:=1 to n do
42          begin
43               c[i]:=1;
44               a[i]:=nil;
45          end;
46      for i:=1 to n-1 do
47          begin
48               readln(j,k,l);
49               add(j,k,l);
50               add(k,j,l);
51          end;
52      fillchar(b,sizeof(b),0);ll:=0;
53      dfs(1);
54      writeln(ll);
55 end.              

转载于:https://www.cnblogs.com/HansBug/p/4198030.html

2435: [Noi2011]道路修建相关推荐

  1. bzoj 2435: [Noi2011]道路修建 树上 dp

    2435: [Noi2011]道路修建 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/pr ...

  2. bzoj 2435: [Noi2011]道路修建(DFS)

    2435: [Noi2011]道路修建 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 4110  Solved: 1429 [Submit][Sta ...

  3. bzoj 2435: [Noi2011]道路修建【树形dp】

    dp求size和deep,然后对每条边模拟求代价即可 #include<iostream> #include<cstdio> #include<algorithm> ...

  4. 【bzoj 2435】[Noi2011]道路修建(dfs)

    2435: [Noi2011]道路修建 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 3505  Solved: 1167 [Submit][Sta ...

  5. BZOJ2435 [Noi2011]道路修建

    这是NOI11年题,你在逗我? 直接dfs就可以了,Linux下貌似不会爆栈... 1 /******************************************************* ...

  6. NOI2011 道路修建

    题目连接:http://221.192.240.123:8586/JudgeOnline/showproblem?problem_id=1670 题意自便. 相关知识:树的遍历,非递归DFS写法. 分 ...

  7. bzoj2435: [Noi2011]道路修建 树上dp

    点击打开链接 RE了一辈子... 思路:树上dp,直接dfs找到每个点v的子节点有多少, 那么对答案的贡献是 w*abs((n-size[v])-size[v]); RE代码: 1 #include ...

  8. 【BZOJ-2435】道路修建 (树形DP?)DFS

    2435: [Noi2011]道路修建 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 3115  Solved: 1002 [Submit][Sta ...

  9. P4878 道路修建-美国

    http://www.tyvj.cn/p/4878道路修建 我想我经大神点拨后终于明白了...回学校再写吧 时间限制:1s 内存限制:256MB [问题描述] A国是一个商业高度发达的国家.它包含了n ...

最新文章

  1. Spring——AOP
  2. ITK:切割网格CutMesh
  3. PandasGUI:使用图形用户界面分析 Pandas 数据帧
  4. 蚂蚁金服CTO程立:AI尚不具备金融级的能力,开放是突破边界唯一出路
  5. python回到本次循环开头_Python中,当一个while循环判断为false,结束这个循环的时候,怎么进入到下一个循环中?...
  6. target runtime apache v7.0 not defined 的解决方法
  7. c语言斐波那契数列_剑指Offer-10-I.斐波那契数列
  8. 12. OD-XOFTSPY监控系统软件,通过windows API进行破解(双重验证,聪明的加密师)
  9. Java简单高精度合集
  10. vs 如何将源文件转换成可执行文件_如何将图片文件转换成PDF文件?
  11. spring定时任务执行两次的原因与解决方法
  12. 方舟服务器伤害怎么显示,方舟单机模式下怎么显示伤害数值啊 | 手游网游页游攻略大全...
  13. openGL之API学习(二零四)GL_TEXTURE_MIN_FILTER GL_TEXTURE_MAG_FILTER
  14. mysql(多级分销)无限极数据库设计方法
  15. 系统学习——Bootstrap
  16. FPGA基础设计(10)Verilog行为级建模(过程赋值)
  17. 网页开发学习(一):制作一份邀请函
  18. 【Math】证明随机分布X1, X2, ..., Xn独立同分布的最大概率问题
  19. 几个强大到没朋友的资源网站 个个都是精品
  20. FFmpeg进阶:音视频滤镜概述

热门文章

  1. 闪存普及推动技术进步!2016年存储行业五大热门技术回顾
  2. 前端那点事儿——Tocify自动生成文档目录
  3. 快速连续点击两次出现相同内容的解决方法
  4. 几种常见的数据库连接方法
  5. Linux 操作系统原理 — loop 伪设备
  6. 5G NGC — 会话管理模型 — PDU Session
  7. 教你搭建基于typescript的vue项目
  8. 从0实现一个tiny-redux
  9. 数据库数据用Excel导出的3种方法
  10. Spring IoC 学习(3)