Luogu P2052 [NOI2011]道路修建
吐槽一下
我开了\(-O2\)优化结果跑的更慢了什么鬼???!!!
我怕不是吸了一口毒氧气
不要脸的放上我的博客,欢迎大家前来面基
题目大意
给定一棵有\(n\)个节点的树,树中有\({n-1}\)条边,每条边花费的价格是这条边两侧的点的数量的差的绝对值和这条边长度的积。求这棵树的总花费。
解题思路
以节点\(1\)作为这棵树的根节点,其实选哪个都可以从题中可以得出一个基本的结论,一条边的两边的点的数量分别等于终点节点儿子的数量\(+1\)和起点节点祖先的数量。我们可以通过遍历整棵树将每个节点儿子的数量预处理出来。
在预处理的同时可以进行统计。到最后输出Ans就可以
附上代码
当然不能少了代码
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#define int long long
using namespace std;
const int maxn = 1e6+3;
int n, fir[maxn], nx[maxn<<1], u[maxn<<1], v[maxn<<1], w[maxn<<1], s[maxn], Ans;
bool vis[maxn];
inline int DFS(int x, int fr) {
if(s[x] != 1) return s[x];
int k = fir[x];
while (k != -1) {
if(fr != v[k]) {
s[x] += DFS(v[k], x);
Ans += abs(n-2*s[v[k]]) * w[k];
}
k = nx[k];
}
return s[x];
}
main() {
scanf("%lld", &n);
memset(fir, -1, sizeof(fir));
fill(s+1, s+1+n, 1);
for(int i=1; i<=(n-1)*2; i++) {
scanf("%lld%lld%lld", &u[i], &v[i], &w[i]);
nx[i] = fir[u[i]];
fir[u[i]] = i;
u[i+1] = v[i], v[i+1] = u[i], w[i+1] = w[i];
i++;
nx[i] = fir[u[i]];
fir[u[i]] = i;
}
vis[1] = 1;
DFS(1, 1);
printf("%lld", Ans);
}
Luogu P2052 [NOI2011]道路修建的更多相关文章
- P2052 [NOI2011]道路修建——树形结构(水题,大佬勿进)
P2052 [NOI2011]道路修建 这个题其实在dfs里面就可以把事干完的,(我一开始还拿出来求了一把)…… 一条边的贡献就是儿子的大小和n-siz[v]乘上边权: #include<cma ...
- 洛谷P2052 [NOI2011]道路修建(树形DP)
题目描述 在 W 星球上有 n 个国家.为了各自国家的经济发展,他们决定在各个国家 之间建设双向道路使得国家之间连通.但是每个国家的国王都很吝啬,他们只愿 意修建恰好 n – 1 条双向道路. 每条道 ...
- P2052 [NOI2011]道路修建
题目描述 在 W 星球上有 n 个国家.为了各自国家的经济发展,他们决定在各个国家 之间建设双向道路使得国家之间连通.但是每个国家的国王都很吝啬,他们只愿 意修建恰好 n – 1 条双向道路. 每条道 ...
- luogu 2052 [NOI2011]道路修建 BFS序
据说dfs会爆栈,写一个 BFS 序更新就好了~ #include <bits/stdc++.h> #define N 1000005 #define ll long long #defi ...
- 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 ...
- BZOJ 2435: [Noi2011]道路修建( dfs )
NOI的水题...直接一遍DFS即可 ------------------------------------------------------------------------- #includ ...
- 2435: [Noi2011]道路修建
2435: [Noi2011]道路修建 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 2188 Solved: 639[Submit][Status ...
- BZOJ_2435_[Noi2011]道路修建_dfs
BZOJ_2435_[Noi2011]道路修建_dfs 题意: http://www.lydsy.com/JudgeOnline/problem.php?id=2435 分析: dfs搞定. 我怕爆栈 ...
随机推荐
- hdoj--1379--DNA Sorting(排序水题)
DNA Sorting Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) T ...
- 基于Linux系统的Shell编程-基础篇
1. Shell基础介绍 1.1 Shell编程的意义 为什么使用shell编程 节约时间 1.2 显示脚本执行过程 前面有+表示执行过的命令的 前面没有东西,表示输出到屏幕上的内容. [root@C ...
- git 删除本地仓库
更新: 2017/06/27 修改格式,备注mac下的命令没测试过 windows: rm .git/ mac: sudo rm -rf .git/ 没验证
- bzoj 2017: [Usaco2009 Nov]硬币游戏【dp】
废了废了,一个小dp都想不出来 把c数组倒序一下,变成1在最下,设f[i][j]为某一人取完j个之后还剩1~i的硬币,转移的话应该是f[i][j]=max(s[i]-f[i-k][k]),就是1~n的 ...
- codevs1297 硬币(背包dp,方案数)
1297 硬币 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 我们知道即使是同一种面值的硬币,它们的重量也有可能不一样, ...
- 网络爬虫之scrapy框架(CrawlSpider)
一.简介 CrawlSpider其实是Spider的一个子类,除了继承到Spider的特性和功能之外,还派生了其自己独有的更强大的特性和功能.其中最显著的功能就是"LinkExtractor ...
- android序列化(2)Parcelable与Parcel
1.简介 Parcel : 包裹 Android采用这个它封装消息数据.这个是通过IBinder通信的消息的载体.需要明确的是Parcel用来存放数据的是内存(RAM),而不是永久性介质(Nand等 ...
- Android 性能优化(14)网络优化( 10)Determining and Monitoring the Connectivity Status
Determining and Monitoring the Connectivity Status This lesson teaches you to Determine if you Have ...
- 从 C++ 到 Objective-C 的快速指南
简介 当我开始为iOS写代码的时候,我意识到,作为一个C++开发者,我必须花费更多的时间来弄清楚Objective-C中怪异的东西.这就是一个帮助C++专家的快速指南,能够使他们快速的掌握Apple的 ...
- rem自适应布局小结001
在最近的移动端布局当中,最炙手可热的方式便是使用rem进行元素的布局.以下便是从最近的文章中所总结出来的一点东西. 首先,我们必须有以下的疑问: rem的本质是什么? rem如何实现自适应布局? 如何 ...