Problem

Description

Input

Output

对于每组数据,输出一个整数,表示达到“平衡”状态所需的最小代价。

Data Constraint

对于20%的数据,N<=15

对于100%的数据,T<=10,N<=100,0<=si<=10000,1<=X,Y<=N,1<=Z<=10000。

Solution

这题可以用费用流求解,奈何太长了

只好DP了

我们发现,当达到所谓“平衡”状态时,每个点的石油数应是ave或ave+1

所以我们考虑枚举子树中ave+1的节点的个数

设\(f_{i,j}\)表示以i为根的子树中有j个ave+1的节点的最小贡献

如果我们暴力枚举会T飞

所以考虑合并

用\(g_{j}\)来存当前的当前的答案

则f数组存的则是之前做的所有的儿子的答案

则该儿子节点的贡献则为\(abs(sum_{son}-ave\times tree_{son}-k)\)

其中,sum为该子树原有的石油数,tree表示该子树的节点数,而k则为该子树中的ave+1的节点的个数

做完后再用g数组更新f

时间复杂度\(O(n^{3})\)

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int t,sum,n,i,a,b,c,dec,ave,len,go[1001],to[1001],last[101],jz[1001],tree[101],cnt[101],w[101];
long long f[101][1001],g[1001];
void make(int x,int y,int z)
{
go[++len]=y;to[len]=last[x];jz[len]=z;last[x]=len;
}
void dp(int x,int fa)
{
f[x][0]=f[x][1]=0;
tree[x]=1;cnt[x]=w[x];
for (int k=last[x];k;k=to[k])
{
if (go[k]==fa) continue;
dp(go[k],x);
tree[x]+=tree[go[k]];cnt[x]+=cnt[go[k]];
}
for (int k=last[x];k;k=to[k])
{
memset(g,127,sizeof(g));
if (go[k]==fa) continue;
for (int j=0;j<=dec && j<=tree[x];j++)
{
for (int i=0;i<=j && i<=tree[go[k]];i++)
{
g[j]=min(g[j],f[x][j-i]+f[go[k]][i]+1ll*abs(cnt[go[k]]-tree[go[k]]*ave-i)*jz[k]);
}
}
for (int j=0;j<=dec && j<=tree[x];j++)
f[x][j]=g[j];
}
}
int main()
{
scanf("%d",&t);
for (;t;t--)
{
memset(last,0,sizeof(last));
scanf("%d",&n);sum=0;
for (i=1;i<=n;i++)
{
scanf("%d",&w[i]);
sum+=w[i];
}len=0;
for (i=1;i<n;i++)
{
scanf("%d%d%d",&a,&b,&c);
make(a,b,c);
make(b,a,c);
}
dec=sum%n;
ave=sum/n;
memset(f,127,sizeof(f));
dp(1,0);
printf("%lld\n",f[1][dec]);
}
}

要恶补网络流啊

jzoj 3567. 【GDKOI2014】石油储备计划的更多相关文章

  1. 【GDKOI2014】JZOJ2020年8月13日提高组T2 石油储备计划

    [GDKOI2014]JZOJ2020年8月13日提高组T2 石油储备计划 题目 Description Input Output 对于每组数据,输出一个整数,表示达到"平衡"状态 ...

  2. 【时光回溯】【JZOJ3567】【GDKOI2014】石油储备计划

    题目描述 输入 输出 对于每组数据,输出一个整数,表示达到"平衡"状态所需的最小代价. 样例输入 2 3 6 1 5 1 2 1 2 3 2 5 4 5 4 3 2 1 3 1 1 ...

  3. 帕累托分布(Pareto distributions)、马太效应

    什么是帕累托分布 帕累托分布是以意大利经济学家维弗雷多·帕雷托命名的. 是从大量真实世界的现象中发现的幂次定律分布.这个分布在经济学以外,也被称为布拉德福分布. 帕累托因对意大利20%的人口拥有80% ...

  4. hbase官方文档(转)

    FROM:http://www.just4e.com/hbase.html Apache HBase™ 参考指南  HBase 官方文档中文版 Copyright © 2012 Apache Soft ...

  5. HBase 官方文档

    HBase 官方文档 Copyright © 2010 Apache Software Foundation, 盛大游戏-数据仓库团队-颜开(译) Revision History Revision ...

  6. HBase官方文档

    HBase官方文档 目录 序 1. 入门 1.1. 介绍 1.2. 快速开始 2. Apache HBase (TM)配置 2.1. 基础条件 2.2. HBase 运行模式: 独立和分布式 2.3. ...

  7. 转载:HBASE配置说明

    HBase 默认配置  ,原文:http://eclecl1314-163-com.iteye.com/blog/1474286 该文档是用hbase默认配置文件生成的,文件源是 hbase-defa ...

  8. hbase-site.xml 配置详解

    hbase.rootdir 这个目录是region server的共享目录,用来持久化HBase.URL需要是'完全正确'的,还要包含文件系统的scheme.例如,要表示hdfs中的'/hbase'目 ...

  9. Hbase集群搭建及所有配置调优参数整理及API代码运行

    最近为了方便开发,在自己的虚拟机上搭建了三节点的Hadoop集群与Hbase集群,hadoop集群的搭建与zookeeper集群这里就不再详细说明,原来的笔记中记录过.这里将hbase配置参数进行相应 ...

随机推荐

  1. C#LeetCode刷题之#257-二叉树的所有路径(Binary Tree Paths)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4082 访问. 给定一个二叉树,返回所有从根节点到叶子节点的路径. ...

  2. NeuralCoref: python的共指消解工具教程

    转载地址 https://blog.csdn.net/blmoistawinde/article/details/81782971 共指消解 首先简要地说说共指消解是什么,有什么用处.假设机器正在阅读 ...

  3. 攻防世界-web(进阶)-Training-WWW-Robots

    进行后台扫描,发现一个robots.txt,进入之后说存在fl0g.php,进入即可得flag. cyberpeace{73279bc0d3c28ba6da4d1d3d530e7c16}

  4. Netty多协议开发

    HTTP协议开发 post与get的区别 1)get用于信息获取,post用于更新资源. 2)get数据放在请求行中,post数据放在请求体内. 3)get对数据长度有限制(2083字节),post没 ...

  5. Python定时任务轻量解决方案---Schedule

    写后端的同学们可能都知道,工作中可能需要周期性执行一些任务,俗称定时任务.Linux环境下,可以借助于系统自带的crontab完成定时任务.但是很多时候,开发的同学们可能并没有权限去操作crontab ...

  6. 企业项目实战 .Net Core + Vue/Angular 分库分表日志系统五 | 完善业务自动创建数据库

    教程预览 01 | 前言 02 | 简单的分库分表设计 03 | 控制反转搭配简单业务 04 | 强化设计方案 05 | 完善业务自动创建数据库 说明 这节来把基础的业务部分完善一下. 因为 IQue ...

  7. Java中的判断实例

    .getClass().getName() 这是最常见的一种判断类型的方法 instanceof 用于判断 对象 是否为某个类的实例 Boolean值 各种is方法 isAnnotationPrese ...

  8. 【转】Echarts自适应

    var myChart1 = echarts.init(document.getElementById('chart1')); var option = myChart1.getOption(); w ...

  9. shell脚本同步私人git仓库

    前言 分别在个人电脑.个人服务器.码云三个地方建立了数据仓库用于保存自己的各种数据,通过git+shell进行数据同步. 此举不仅可以避免因存储损坏.版本更迭.数据误操作等因素带来的各种麻烦,也能实现 ...

  10. Java面试题(设计模式篇+Spring/Spring MVC篇)

    设计模式 88.说一下你熟悉的设计模式? 自行熟悉. 89.简单工厂和抽象工厂有什么区别? 简单理解简单工厂:对 一个对象的创建进行封装.抽象工厂:对 一组对象的创建进行封装. 比如生产 陶瓷马 和  ...