负载平衡(cogs 741)

?问题描述:
G 公司有n 个沿铁路运输线环形排列的仓库,每个仓库存储的货物数量不等。如何用最
少搬运量可以使n 个仓库的库存数量相同。搬运货物时,只能在相邻的仓库之间搬运。
?编程任务:
对于给定的n 个环形排列的仓库的库存量,编程计算使n 个仓库的库存数量相同的最少
搬运量。
?数据输入:
由文件overload.in提供输入数据。文件的第1 行中有1 个正整数n(n<=100),表示有n
个仓库。第2 行中有n个正整数,表示n个仓库的库存量。
?结果输出:
程序运行结束时,将计算出的最少搬运量输出到文件overload.out中。
输入文件示例 输出文件示例
overload.in
5

17 9 14 16 4

overload.out

11

/*
    设A[i]=库存-平均值
    把点拆成两部分,一部分表示供应节点,一部分表示需求节点。
    若A[i]>0,S向i连一条容量为A[i],费用为0的边。
    若A[i]<0,i‘向T连一条容量为-A[i],费用为0的边。
    对与相邻的i和j,i向j‘连一条容量为inf,费用为1的边,表示搬过去;
    同时i向j连一条容量为inf,费用为1的边表示暂时搬过去但不满足需求。
    (也可以先预处理出来最短路,然后直接做。)
*/
#include<iostream>
#include<cstdio>
#include<queue>
#define N 210
#define inf 1000000000
using namespace std;
int a[N],head[N],dis[N],inq[N],fa[N],n,S,T,cnt=1,ans;
struct node{int v,f,w,pre;}e[N*10];
queue<int> q;
void add(int u,int v,int f,int w){
    e[++cnt].v=v;e[cnt].f=f;e[cnt].w=w;e[cnt].pre=head[u];head[u]=cnt;
    e[++cnt].v=u;e[cnt].f=0;e[cnt].w=-w;e[cnt].pre=head[v];head[v]=cnt;
}
bool spfa(){
    if(ans==13){
        int aaa=1;
    }
    for(int i=0;i<=T;i++) dis[i]=inf;
    q.push(S);dis[S]=0;
    while(!q.empty()){
        int u=q.front();q.pop();inq[u]=0;
        for(int i=head[u];i;i=e[i].pre)
            if(e[i].f&&dis[e[i].v]>dis[u]+e[i].w){
                dis[e[i].v]=dis[u]+e[i].w;
                fa[e[i].v]=i;
                if(!inq[e[i].v]){
                    q.push(e[i].v);
                    inq[e[i].v]=1;
                }
            }
    }
    return dis[T]!=inf;
}
void updata(){
    int i=fa[T],x=inf;
    while(i){
        x=min(x,e[i].f);
        i=fa[e[i^1].v];
    }
    i=fa[T];
    while(i){
        e[i].f-=x;
        e[i^1].f+=x;
        i=fa[e[i^1].v];
    }
    ans+=x*dis[T];
}
int main(){
    freopen("overload.in","r",stdin);
    freopen("overload.out","w",stdout);
    scanf("%d",&n);int sum=0;
    for(int i=1;i<=n;i++)
        scanf("%d",&a[i]),sum+=a[i];
    S=0;T=n*2+1;sum/=n;
    for(int i=1;i<=n;i++) a[i]-=sum;
    for(int i=1;i<=n;i++){
        if(a[i]>0) add(S,i,a[i],0);
        if(a[i]<0) add(i+n,T,-a[i],0);
    }
    for(int i=1;i<=n;i++){
        int t1=i-1,t2=i%n+1;
        if(!t1) t1=n;
        add(i,t1,inf,1);add(i,t1+n,inf,1);
        add(i,t2,inf,1);add(i,t2+n,inf,1);
    }
    while(spfa())
        updata();
    printf("%d",ans);
    return 0;
}
时间: 2024-12-28 21:27:25

负载平衡(cogs 741)的相关文章

pfsense Web服务器负载平衡配置示例

在pfsense的网关和服务器中有两种类型的负载平衡功能.网关负载平衡可以通过多个WAN连接分发Internet绑定的流量.服务器负载平衡管理传入流量,因此它利用多个内部服务器进行负载分配和冗余,服务器负载平衡允许流量在多个内部服务器之间分配,它最常用于Web服务器和SMTP服务器.下面我们就以实例来介绍服务器负载平衡的设置. 下面介绍如何通过pfsense2.32配置Web服务器的负载平衡. 网络环境 服务器负载平衡示例网络环境 上图为示例网络环境.它由单个防火墙组成,使用其WAN IP地址池

Go 语言开发的基于 Linux 虚拟服务器的负载平衡平台 Seesaw

负载均衡系统 Seesaw Seesaw是由我们网络可靠性工程师用 Go 语言开发的基于 Linux 虚拟服务器的负载平衡平台,就像所有好的项目一样,这个项目也是为了解决实际问题而产生的. Seesaw发布的博客中这样写道:“我们需要能够处理单播(unicast)和任播(anycast)虚拟 IP (VIPs) 流量,使用 NAT 和 DSR (也被称为 DR) 执行负载均衡,执行针对后端的健康检查.特别是,我们需要一个容易管理的平台,可以自动部署配置的变化.在评估了一些包括现有的开源项目的平台

微软Azure云之企业Exchange 2016部署12&mdash;配置负载平衡

上几节我们把Exchange2016邮箱系统配置完毕了,本节我们来配置开通需要对外的端口,并对这些端口进行负载均衡配置,如下图红框所示: 1.Exchange服务端口 Exchange2016需要对外开通以下的端口,来对外提供不同的服务: 其中最主要的事HTTPS(443)端口,以下服务需要用到此端口: 自动发现服务 Exchange ActiveSync Exchange Web 服务 (EWS) 脱机通讯簿 Outlook 无处不在 MAPI over HTTP in Exchange 20

Windows Server 2008 R2 负载平衡入门篇

一.简单介绍负载均衡 负载均衡也称负载共享,它是指负载均衡是指通过对系统负载情况进行动态调整,把负荷分摊到多个操作节点上执行,以减少系统中因各个节点负载不均衡所造成的影响,从而提高系统的工作效率.在常用的大型服务器系统当中都存在着负载均衡组件,常用的像微软的网络负载平衡NLB.甲骨文的Oracle RAC.思科的负载均衡(SLB),Apach+Tomcat 负载均衡,它们能从硬件或软件不同方面实现系统各节点的负载平衡,有效地提高大型服务器系统的运行效率,从而提升系统的吞吐量.本篇文章以微软的网络

企业级负载平衡简介

在之前的一篇文章<放好你的密码 - 从芝麻金融被攻破说起>中,一位读者在评论中提出了“如果整个过程速度比较慢登陆会有问题”这样一条评论.虽然说我对文章的正确性很有把握,但也仍需要仔细思考是否自己哪里没有说清楚.在这个思考过程中,我想起了一个非常值得一说的话题,那就是负载平衡. 在那篇文章中我们说到,要安全地管理好密码,计算密码哈希所使用的迭代次数应该尽可能地大,从而使得单次哈希计算的速度变长,增加恶意人员破解密码的难度.反过来,如果有一百个人或者一千个人同时执行登陆操作,那么这么繁琐的哈希计算

windows server 2003 负载平衡的详细设置步骤(转载)

声明:本文为转载. 当把一台服务器(包括Web服务器.FTP服务器或者流媒体服务器等等)放入网络中之后,随着客户端数量的不断增加,人们往往需要功能更强大.处理速度更快的服务器.为了解决这个问题,如果将原有的服务器替换成功能更强大.处理速度更快的服务器显然并不是值得称道的办法.但是如果能把新服务器添加到原有服务器的处理能力基础上而不是替换它,这种方案毫无疑问更容易被用户接受.网络负载平衡(Network Load Balancing,NLB)群集的出现正好实现了这一目的. 一.网络负载平衡介绍 N

负载平衡的分发器

NServiceBus经销商类似行为的标准负载平衡器.它是透明的扩展的关键消息处理在许多机器. 作为标准NServiceBus过程中,经销商维护所有NServiceBus的容错和性能特征,但设计不压倒任何职工的节点配置来接收工作. 什么时候使用它呢? 扩展(有或没有一个分销商)对所做的工作仅仅是有用的一台机器需要时间,因此帮助更多的计算资源.帮助,监控CriticalTime性能计数器端点和当你有需要添加的分销商.使用经销商在需要的时候扩展是由不容易改变代码,刚刚开始相同的端点在经销商和职工档案

搭建2008 R2 IIS网络负载平衡

             windows server 2008 R2 搭建 IIS 负载平衡 我们直接从实验入手,那样更容易理解,安装iis的步骤就跳过 首先,准备三台虚拟机,要求三台虚拟机能相互访问.本实验里的三台计算机名称分别是:文件服务器08s6,两个群集节点分别是08s5和083,网站的配置和主目录放在文件服务器08s6上.给每台虚拟机新建立一个相同的用户名(webuser)和密码(123.com).把webuser加入到 iis_iusrs 组. 三台虚拟机的ip: 08s6:192

Windows Server 2008 R2/2012 网络负载平衡NLB相关内容

使用网络负载均衡技术可以实现一些应用程序的可用性和可伸缩性,常用的应用程序有:IIS.防火墙.VPN以及一些关键业务.每一个节点运行应用程序的一个副本.NLB在群集中的多个主机中分发传入的客户端请求.可以动态地添加主机,也可以将所有流量引导到指定的单个主机,这个主机就称为默认主主机.在一个群集中最多支持 32 台计算机. 当计算机意外出现故障或者脱机时,将断开与出现故障或脱机的服务器之间的活动连接.但是,如果您有意关闭主机,则可以在使计算机脱机之前,使用 drainstop 命令处理所有活动的连

Azure虚拟机负载平衡

Azure 负载平衡 负载平衡概述: Microsoft Azure 为在其中托管的虚拟机(IaaS) 和云服务(PaaS)提供负载平衡服务.负载平衡支持应用程序伸缩,并且提供应用程序故障恢复以及其他优势.可以通过以下方式访问负载平衡服务:通过Microsoft Azure 门户或应用程序的服务模型指定服务上的输入端点.当在Microsoft Azure 上部署一个具有一个或多个输入端点的托管服务后,它会自动配置Microsoft Azure 平台提供的负载平衡服务.要充分利用服务的弹性/冗余性