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++11起)

    定义于头文件 cstdint中int8_t.int16_t.int32_t.int64_t 分别为宽度恰为 8 . 16 . 32 和 64 位的有符号整数类型无填充位并对负值使用补码(仅若实现支持该 ...

  2. 2020-05-25:MQ应用场景、Kafka和rabbit区别?kafka为什么支撑高并发? 来自

    福哥答案2020-05-25: 应用场景:解耦.异步.削峰.区别如下:特性 ActiveMQ RabbitMQ RocketMQ Kafka单机吞吐量 万级,比 RocketMQ.Kafka 低一个数 ...

  3. ldap登录验证的通用步骤

    和利用数据库进行验证类似,LDAP中也是利用登陆名和密码进行验证,LDAP中会定义一个属性password,用来存放用户密码,而登陆名使用较多的都是mail地址.那怎么样才能正确的用LDAP进行身份验 ...

  4. 高吞吐量消息系统—kafka

    现在基本上大数据的场景中都会有kafka的身影,那么为什么这些场景下要用kafka而不用其他传统的消息队列呢?例如rabbitmq.主要的原因是因为kafka天然的百万级TPS,以及它对接其他大数据组 ...

  5. kereas 实现鸢尾花分类

    import tensorflow as tf from sklearn import datasets import numpy as np x_train=datasets.load_iris() ...

  6. 36 个JS 面试题

    1.JS中let和const有什么用? 在现代js中,let&const是创建变量的不同方式. 在早期的js中,咱们使用var关键字来创建变量. let&const关键字是在ES6版本 ...

  7. Pycharm中对与Python的快捷方式

    转自博客园 @python~小成录 pycharm常用快捷键与设置   pycharm高频率使用的快捷键 Ctrl+Shift+F10 运行当前的页面 Ctrl + / 注释(取消注释)选择的行 Ct ...

  8. ARM伪指令与伪操作

    一.伪指令 ARM伪指令有四个,分别是LDR.ADR.ADRL和NOP,下边对其分别介绍. 1.1 LDR LDR 伪指令用于加载 32 位的立即数或一个地址值到指定寄存器 .形式如  LDR{con ...

  9. C# 监听值的变化

    1.写一个监听值变化的类 public class MonitorValueChange { private Visibility myValue; public Visibility MyValue ...

  10. mysql高级内容学习总结

    创建索引 create [unique] index indexname on tablename(columnname(length)) alter tablename add [unique] i ...