【时光回溯】【JZOJ3567】【GDKOI2014】石油储备计划
题目描述
输入
输出
对于每组数据,输出一个整数,表示达到“平衡”状态所需的最小代价。
样例输入
2
3
6 1 5
1 2 1
2 3 2
5
4 5 4 3 2
1 3 1
1 2 2
2 4 3
2 5 4
样例输出
4
4
数据范围
对于20%的数据,N<=15
对于100%的数据,T<=10,N<=100,0<=si<=10000,1<=X,Y<=N,1<=Z<=10000。
样例解释
对于第一组数据,从城市1到城市2运输2桶石油,代价为1*2=2;从城市3往城市2运输1桶石油,代价为2*1=2。此时三个城市储备量都为4桶,该状态的平衡度为0。
对于第二组数据,从城市2到城市5运输1桶石油,代价为1*4=4;此时五个城市储备量为(4,4,4,3,3),该状态的非平衡度为1.2,是能达到的所有状态的最小值。
解法
显然分配的桶数有(sum%n)个(sum/n+1)桶,其他都是sum/n个桶。
设f[i][j]为在i为根的子树中,放了j个(sum/n+1)桶。
这样对于这棵以i为根的子树,桶的总数是一定的,设为x;然后i与其父亲的流量显然是x-原桶数。
而一条边的贡献=流量*这条边的长度。
答案又是所有边的贡献之和。
所以给状态转移提供了条件。
没有必要把原树转化为二叉树。
题解还提供了网络流做法;以及二叉树形动态规划的做法。
代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define ll long long
#define sqr(x) ((x)*(x))
#define ln(x,y) ll(log(x)/log(y))
using namespace std;
const char* fin="ex3567.in";
const char* fout="ex3567.out";
const ll inf=0x7fffffff;
const ll maxn=107,maxm=maxn*2;
ll t,n,m,m1,i,j,k,l,tot,INF;
ll fi[maxn],ne[maxm],la[maxm],a[maxn],va[maxm];
ll f[maxn][maxn],si[maxn],sum[maxn];
ll g[maxn][maxn][maxn];
void add_line(ll a,ll b,ll c){
tot++;
ne[tot]=fi[a];
la[tot]=b;
va[tot]=c;
fi[a]=tot;
}
void dfs(ll v,ll from){
ll i,j,k,l=0;
g[v][l][0]=0;
g[v][l][1]=0;
si[v]=1;
sum[v]=a[v];
for (k=fi[v];k;k=ne[k]){
if (la[k]!=from){
dfs(la[k],v);
si[v]+=si[la[k]];
sum[v]+=sum[la[k]];
for (i=0;i<=m;i++){
if (f[la[k]][i]>=INF) continue;
for (j=m-i;j>=0;j--){
if (g[v][l][j]>=INF) continue;
g[v][l+1][j+i]=min(g[v][l+1][j+i],g[v][l][j]+f[la[k]][i]+abs(sum[la[k]]-i*(m1+1)-(si[la[k]]-i)*m1)*va[k]);
}
}
l++;
}
}
for (i=0;i<=m;i++) f[v][i]=g[v][l][i];
}
int main(){
scanf("%d",&t);
for (;t;t--){
scanf("%d",&n);
memset(fi,0,sizeof(fi));
memset(f,127,sizeof(f));
memset(g,127,sizeof(g));
INF=g[0][0][0];
tot=0;
k=0;
for (i=1;i<=n;i++) scanf("%d",&a[i]),k+=a[i];
m=k%n;
m1=k/n;
for (i=1;i<n;i++){
scanf("%d%d%d",&j,&k,&l);
add_line(j,k,l);
add_line(k,j,l);
}
dfs(1,0);
//f[1][m]=-f[1][m];
printf("%lld\n",f[1][m]);
}
return 0;
}
启发
树形动态规划的必要条件之一:
设置的状态可以确定一棵子树所提供的贡献,从而可以进行转移。
【时光回溯】【JZOJ3567】【GDKOI2014】石油储备计划的更多相关文章
- 【GDKOI2014】JZOJ2020年8月13日提高组T2 石油储备计划
[GDKOI2014]JZOJ2020年8月13日提高组T2 石油储备计划 题目 Description Input Output 对于每组数据,输出一个整数,表示达到"平衡"状态 ...
- jzoj 3567. 【GDKOI2014】石油储备计划
Problem Description Input Output 对于每组数据,输出一个整数,表示达到"平衡"状态所需的最小代价. Data Constraint 对于20%的数据 ...
- 【时光回溯】【JZOJ3566】【GDKOI2014】阶乘
题目描述 输入 第一行有一个正整数T,表示测试数据的组数. 接下来的T行,每行输入两个十进制整数n和base. 输出 对于每组数据,输出一个十进制整数,表示在base进制下,n!结尾的零的个数. 样例 ...
- 【时光回溯】【JZOJ3571】【GDKOI2014】内存分配
题目描述 输入 输出 输出m行,每行一个整数,代表输入中每次程序变化后系统所需要的空闲内存单位数. 样例输入 2 3 1 4 1 4 2 2 1 2 1 1 1 1 1 样例输出 2 3 1 数据范围 ...
- 【时光回溯】【JZOJ3568】【GDKOI2014】小纪的作业题
题目描述 输入 输出 有M行,每个询问一行,输出结果mod 1,000,000,007的值. 样例输入 10 3 3 5 1 2 3 1 3 5 2 1 7 9 3 9 2 3 样例输出 10 19 ...
- 帕累托分布(Pareto distributions)、马太效应
什么是帕累托分布 帕累托分布是以意大利经济学家维弗雷多·帕雷托命名的. 是从大量真实世界的现象中发现的幂次定律分布.这个分布在经济学以外,也被称为布拉德福分布. 帕累托因对意大利20%的人口拥有80% ...
- hbase官方文档(转)
FROM:http://www.just4e.com/hbase.html Apache HBase™ 参考指南 HBase 官方文档中文版 Copyright © 2012 Apache Soft ...
- HBase 官方文档
HBase 官方文档 Copyright © 2010 Apache Software Foundation, 盛大游戏-数据仓库团队-颜开(译) Revision History Revision ...
- HBase官方文档
HBase官方文档 目录 序 1. 入门 1.1. 介绍 1.2. 快速开始 2. Apache HBase (TM)配置 2.1. 基础条件 2.2. HBase 运行模式: 独立和分布式 2.3. ...
随机推荐
- csp-s模拟46 set read race
题面:https://www.cnblogs.com/Juve/articles/11556809.html Set: 题干中说的M个数两两不同是说不能重复选同一个位置的数,而不是不能选数值相同的数, ...
- Django项目:CRM(客户关系管理系统)--79--69PerfectCRM实现CRM业务流程(bpm)学生讲师分页
# student_views.py # ————————60PerfectCRM实现CRM学生上课记录———————— from django.shortcuts import render #页面 ...
- jeecms 配置可以低级别用户流程
使用管理员admin登录后台,进入用户—>管理员(本站)à添加,填写用户名.密码等信息,如下图: 需要注意几个权限控制的问题: 1, 等级,值越大等级越高,等级高的管理员可以审核等级低的管理员 ...
- 建造者模式(Builder)(生成器模式)(框架化)
建造者模式将一个复杂对象的构建与其表示分离. 将复杂对象进行框架化,将同类的对象编造进同一个制造流程.同类·对象会有一样的框架. 而由于各部分的实现细节有所不同,所生产出来的产品会有所不同.从而有不同 ...
- jmeter参数化之用户自定义变量
1. 用badboby进行录制,录制完成后保存,用JMeter格式进行保存,如:登陆.jmx 2. 在jmeter中打开保存的文件登陆.jmx. 3.线程组右击-添加-配置元件-用户定 ...
- 利用TensorFlow识别手写的数字---基于两层卷积网络
1 为什么使用卷积神经网络 Softmax回归是一个比较简单的模型,预测的准确率在91%左右,而使用卷积神经网络将预测的准确率提高到99%. 2 卷积网络的流程 3 代码展示 # -*- coding ...
- 关于hive表同步类型问题
今天华为做实施的时候发现kylin做刷cube的时候发现源表数据类型不适合刷到kylin提供查询接口.问了下同事发现一个比较简单的解决办法. 源表是String类型,做hive视图可以做个hive表提 ...
- Luogu P2864 [USACO06JAN]树林The Grove(bfs)
P2864 [USACO06JAN]树林The Grove(bfs) 题面 题目描述 The pasture contains a small, contiguous grove of trees t ...
- php 5.3 iis php_memcache 安装不上
有的服务器很扯淡,安装了很长时间的php_memcache 扩展 始终安装不上 具体原因不清楚 因为 php_memcache.dll php 官网上只有 最新支持的版本 例如 http://pecl ...
- SSM11-solr服务的搭建
1. Solr服务搭建 1.1. Solr的环境 Solr是java开发. 需要安装jdk. 安装环境Linux. 需要安装Tomcat. 1.2. 搭建步骤 第一步:把solr 的压缩包上传到Li ...