题意

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



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

\(n \leq 10^6\)

分析

照题目模拟就行了。

时间复杂度\(O(n)\)

  1. #include<cstdlib>
  2. #include<cstdio>
  3. #include<cmath>
  4. #include<cstring>
  5. #include<iostream>
  6. #include<string>
  7. #include<vector>
  8. #include<list>
  9. #include<deque>
  10. #include<stack>
  11. #include<queue>
  12. #include<map>
  13. #include<set>
  14. #include<bitset>
  15. #include<algorithm>
  16. #include<complex>
  17. #define rg register
  18. #define il inline
  19. #define co const
  20. #pragma GCC optimize ("O0")
  21. using namespace std;
  22. template<class T> il T read(T&x)
  23. {
  24. T data=0;
  25. int w=1;
  26. char ch=getchar();
  27. while(!isdigit(ch))
  28. {
  29. if(ch=='-')
  30. w=-1;
  31. ch=getchar();
  32. }
  33. while(isdigit(ch))
  34. data=10*data+ch-'0',ch=getchar();
  35. return x=data*w;
  36. }
  37. typedef long long ll;
  38. const int INF=0x7fffffff;
  39. const int MAXN=1e6+7;
  40. int n;
  41. struct Edge
  42. {
  43. int nx,to,w;
  44. }E[MAXN<<1];
  45. int head[MAXN],ecnt;
  46. void addedge(int x,int y,int w)
  47. {
  48. E[++ecnt].to=y,E[ecnt].w=w;
  49. E[ecnt].nx=head[x],head[x]=ecnt;
  50. }
  51. ll ans;
  52. int siz[MAXN];
  53. void dfs(int x,int f)
  54. {
  55. siz[x]=1;
  56. for(int i=head[x];i;i=E[i].nx)
  57. {
  58. int y=E[i].to,w=E[i].w;
  59. if(y==f)
  60. continue;
  61. dfs(y,x);
  62. siz[x]+=siz[y];
  63. ans += (ll) abs(n-2*siz[y]) * w;
  64. }
  65. }
  66. int main()
  67. {
  68. // freopen(".in","r",stdin);
  69. // freopen(".out","w",stdout);
  70. read(n);
  71. for(int i=1;i<n;++i)
  72. {
  73. int x,y,w;
  74. read(x);read(y);read(w);
  75. addedge(x,y,w);
  76. addedge(y,x,w);
  77. }
  78. dfs(1,0);
  79. printf("%lld\n",ans);
  80. // fclose(stdin);
  81. // fclose(stdout);
  82. return 0;
  83. }

LG2052 [NOI2011]道路修建的更多相关文章

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

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

  2. NOI2011道路修建

    2435: [Noi2011]道路修建 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1974  Solved: 550[Submit][Status ...

  3. BZOJ 2435: [Noi2011]道路修建( dfs )

    NOI的水题...直接一遍DFS即可 ------------------------------------------------------------------------- #includ ...

  4. 2435: [Noi2011]道路修建

    2435: [Noi2011]道路修建 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2188  Solved: 639[Submit][Status ...

  5. BZOJ_2435_[Noi2011]道路修建_dfs

    BZOJ_2435_[Noi2011]道路修建_dfs 题意: http://www.lydsy.com/JudgeOnline/problem.php?id=2435 分析: dfs搞定. 我怕爆栈 ...

  6. BZOJ 2435: [Noi2011]道路修建 dfs搜图

    2435: [Noi2011]道路修建 Description 在 W 星球上有 n 个国家.为了各自国家的经济发展,他们决定在各个国家之间建设双向道路使得国家之间连通.但是每个国家的国王都很吝啬,他 ...

  7. 2435: [Noi2011]道路修建(树上操作)

    2435: [Noi2011]道路修建 题目:传送门 题解: 建完边之后以1为根建树,统计深度和各个点的子树大小(包括自己) 询问的时候:答案=长度*abs(n-深度大的点的子树大小*2) ans+= ...

  8. P2052 [NOI2011]道路修建——树形结构(水题,大佬勿进)

    P2052 [NOI2011]道路修建 这个题其实在dfs里面就可以把事干完的,(我一开始还拿出来求了一把)…… 一条边的贡献就是儿子的大小和n-siz[v]乘上边权: #include<cma ...

  9. 【bzoj2435】[NOI2011]道路修建

    题目描述 在 W 星球上有 n 个国家.为了各自国家的经济发展,他们决定在各个国家之间建设双向道路使得国家之间连通.但是每个国家的国王都很吝啬,他们只愿意修建恰好 n – 1条双向道路. 每条道路的修 ...

随机推荐

  1. some tools

    mac alfred http://www.cnblogs.com/chijianqiang/p/alfred.html

  2. 逆向及BOF基础实践

    逆向及BOF基础实践 20145316 许心远 一.缓冲区溢出基础知识 缓冲区溢出是一种非常普遍.非常危险的漏洞,在各种操作系统.应用软件中广泛存在.利用缓冲区溢出攻击,可以导致程序运行失败.系统宕机 ...

  3. linux时区问题

    时区问题很麻烦- 0.查看时间命令 #date 查看系统时间 #date -s 修改时间,看下面的例子 #// (将系统日期设定为2014年07月16日) #:: (将系统时间设定为下午11::) # ...

  4. PostgreSQL 9.3:在windows(包括win7)下的安装与正确配置

    首先,以下是常用命令: ③ initdb 初始化 数据库. ④ pg_ctl start 启动数据库 ⑤ pg_ctl stop 停止数据库 ⑥ post_svc -install 建立windows ...

  5. JFreeChart DateAxis用法

    http://blog.csdn.net/xiaozhendong123/article/details/50131513

  6. SQL学习笔记三(补充-2)之MySQL数据类型

    阅读目录 一 介绍 二 数值类型 三 日期类型 四 字符串类型 五 枚举类型与集合类型 一 介绍 存储引擎决定了表的类型,而表内存放的数据也要有不同的类型,每种数据类型都有自己的宽度,但宽度是可选的 ...

  7. linux内核分析第八周-理解进程调度时机跟踪分析进程调度与进程切换的过程

    实验原理: 一.调度时机 不同类型的进程有不同的调度需求 第一种分类:        I/O-bound             频繁的进行I/O            通常会花费很多时间等待I/O操 ...

  8. 20172305 2018-2019-1 《Java软件结构与数据结构》第五周学习总结

    20172305 2018-2019-1 <Java软件结构与数据结构>第五周学习总结 教材学习内容总结 本周内容主要为书第九章内容: 查找是在某个项目组中寻找到某一指定目标元素,或者确定 ...

  9. labview学习之“创建数组”函数

    “创建数组”函数 一.位置:“函数”-“编程”-“数组”-“创建数组” 其图标为: 图1 图标 二.简介: “创建数组”函数有两种模式,一种是“连接模式”,一种是“添加模式”. 如需切换两种模式,可右 ...

  10. curl使用介绍

    linux curl是通过url语法在命令行下上传或下载文件的工具软件,它支持http,https,ftp,ftps,telnet等多种协议,常被用来抓取网页和监控Web服务器状态. 一.Linux ...