bzoj 2435: [Noi2011]道路修建 树上 dp
2435: [Noi2011]道路修建
Time Limit: 20 Sec
Memory Limit: 256 MB
题目连接
http://www.lydsy.com/JudgeOnline/problem.php?id=2435
Description
在 W 星球上有 n 个国家。为了各自国家的经济发展,他们决定在各个国家
之间建设双向道路使得国家之间连通。但是每个国家的国王都很吝啬,他们只愿
意修建恰好 n – 1条双向道路。 每条道路的修建都要付出一定的费用, 这个费用等于道路长度乘以道路两端的国家个数之差的绝对值。例如,在下图中,虚线所示道路两端分别有 2 个、4个国家,如果该道路长度为 1,则费用为1×|2 – 4|=2。图中圆圈里的数字表示国家的编号。
由于国家的数量十分庞大,道路的建造方案有很多种,同时每种方案的修建
费用难以用人工计算,国王们决定找人设计一个软件,对于给定的建造方案,计
算出所需要的费用。请你帮助国王们设计一个这样的软件。
Input
编号。接下来 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
题意
题解:
树形dp,直接dfs就好了,姿势不优美的dp会被卡爆栈……
本是傻逼题,相煎何太急
代码:
//qscqesze #include <cstdio> #include <cmath> #include <cstring> #include <ctime> #include <iostream> #include <algorithm> #include <set> #include <vector> #include <sstream> #include <queue> #include <typeinfo> #include <fstream> #include <map> #include <stack> typedef long long ll; using namespace std; //freopen("D.in","r",stdin); //freopen("D.out","w",stdout); #define sspeed ios_base::sync_with_stdio(0);cin.tie(0) #define test freopen("test.txt","r",stdin) #define maxn 1500005 #define mod 10007 #define eps 1e-9 int Num; char CH[20]; const int inf=0x3f3f3f3f; const ll infll = 0x3f3f3f3f3f3f3f3fLL; inline ll read() {ll x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return x*f; } inline void P(int x) {Num=0;if(!x){putchar('0');puts("");return;}while(x>0)CH[++Num]=x%10,x/=10;while(Num)putchar(CH[Num--]+48);puts(""); } //************************************************************************************** struct node {int x,y; }; ll ans; vector<node> e[maxn]; int vis[maxn]; int size[maxn]; int n; int a,b,c; void dfs(int u) { size[u]=1; node kiss; for(int i=0;i<e[u].size();i++) if(!vis[(kiss=e[u][i]).x]){ vis[kiss.x]=1; dfs(kiss.x); size[u]+=size[kiss.x]; ans+=(ll)abs(n-size[kiss.x]-size[kiss.x])*kiss.y; } } int main() {//test;n=read();for(int i=1;i<n;i++){a=read(),b=read(),c=read();e[a].push_back((node){b,c});e[b].push_back((node){a,c});}vis[n]=1;dfs(n);cout<<ans<<endl;}
bzoj 2435: [Noi2011]道路修建 树上 dp相关推荐
- bzoj 2435: [Noi2011]道路修建(DFS)
2435: [Noi2011]道路修建 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 4110 Solved: 1429 [Submit][Sta ...
- bzoj2435: [Noi2011]道路修建 树上dp
点击打开链接 RE了一辈子... 思路:树上dp,直接dfs找到每个点v的子节点有多少, 那么对答案的贡献是 w*abs((n-size[v])-size[v]); RE代码: 1 #include ...
- bzoj 2435: [Noi2011]道路修建【树形dp】
dp求size和deep,然后对每条边模拟求代价即可 #include<iostream> #include<cstdio> #include<algorithm> ...
- 2435: [Noi2011]道路修建
2435: [Noi2011]道路修建 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 2188 Solved: 639 [Submit][Stat ...
- 【bzoj 2435】[Noi2011]道路修建(dfs)
2435: [Noi2011]道路修建 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 3505 Solved: 1167 [Submit][Sta ...
- BZOJ2435 [Noi2011]道路修建
这是NOI11年题,你在逗我? 直接dfs就可以了,Linux下貌似不会爆栈... 1 /******************************************************* ...
- NOI2011 道路修建
题目连接:http://221.192.240.123:8586/JudgeOnline/showproblem?problem_id=1670 题意自便. 相关知识:树的遍历,非递归DFS写法. 分 ...
- 【BZOJ-2435】道路修建 (树形DP?)DFS
2435: [Noi2011]道路修建 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 3115 Solved: 1002 [Submit][Sta ...
- 算法提高——树上DP(树的直径)
文章目录 前言 一.什么是树的直径? 二.例题 三.树上DP 总结 前言 树的直径是图论里边非常高的考察点并且是入门树形dp的基础,竞赛的同学务必重视. 一.什么是树的直径? 树上最远两点(叶子结点) ...
最新文章
- 人工智能如何彻底改变全球物流和供应链管理
- Android个人信息管理系统 源代码,个人信息管理系统源代码(自己写的).doc
- 2.4g 无线键鼠对码软件_无线路由器的2.4G和5G同时开速度有影响吗?
- 干货!华为AutoML助力AI开发效率提升攻略
- c++中enum 如何使用
- 盲盒拓客小程序商家联盟红包分销裂变抽奖小程序源码
- linux find命令mtime/atime/ctime +n -n n 全网最正确的总结
- 如何选择WEB报表工具(二)
- 分布式文件系统FastDFS安装教程
- 【推荐】在R中无缝集成Github云端代码托管
- Matlab2020b的注释在低版本上乱码
- 01.Unity设置成为中文
- 谷歌免费域名邮箱申请全解
- 202109青少年软件编程(Python)等级考试(五级编程题)
- 计网 | 链路层协议及大题解构
- sonarqube中 项目名称 问题
- 成都涌现大量网游业创业团队:从业人员近3万(网游亦可创业)
- 荣耀手机不出鸿蒙系统,惊喜!4部荣耀手机可升级至华为鸿蒙系统,网友表示:终于等到了...
- php录音功能,微信开发之录音功能
- 服务器网站搭建入门教程