bzoj 3232 01分数规划+最大权封闭子图判定

我们的目标是使v/c最小化,所以构造函数g(x)=v-x*c,那么

二分一个X,判断当时的v-x*c的值是多少,然后根据g(x)函数的

单调递减性来二分,判断,直到g(x)=0的时候当前的X就是答案。

然后我直接写的tle了,这是这两天tle的第3道题了。。。再改改。。。

/**************************************************************
    Problem: 3232
    User: BLADEVIL
    Language: Pascal
    Result: Time_Limit_Exceed
****************************************************************/
 
//By BLADEVIL
const
    lim                         =1e-5;
     
var
    n, m                        :longint;
    pre, other                  :array[0..100010] of longint;
    len                         :array[0..100010] of extended;
    last                        :array[0..3010] of longint;
    tot                         :longint;
    num                         :array[0..60,0..60] of longint;
    key, heng, shu              :array[0..60,0..60] of longint;
    sum                         :longint;
    print                       :extended;
    que, d                      :array[0..3010] of longint;
    source, sink                :longint;
     
function min(a,b:extended):extended;
begin
    if a>b then min:=b else min:=a;
end;
 
function judge(x:extended):extended;
begin
    if abs(x)<lim then exit(0);
    if x<0 then exit(-1) else exit(1);
end;
     
procedure connect(x,y:longint;z:extended);
begin
    inc(tot);
    pre[tot]:=last[x];
    last[x]:=tot;
    other[tot]:=y;
    len[tot]:=z;
end;
     
procedure init;
var
    i, j                        :longint;
     
begin
    read(n,m);
    for i:=1 to n do
        for j:=1 to m do num[i,j]:=(i-1)*m+j;
    for i:=1 to n do
        for j:=1 to m do
        begin
            read(key[i,j]);
            sum:=sum+key[i,j];
        end;
    for i:=1 to n+1 do
        for j:=1 to m do read(heng[i,j]);
    for i:=1 to n do
        for j:=1 to m+1 do read(shu[i,j]);
    source:=num[n,m]+2;
    sink:=source+1;
end;
 
function bfs:boolean;
var
    q, p                        :longint;
    h, t, cur                   :longint;
begin
    fillchar(d,sizeof(d),0);
    d[source]:=1;
    h:=0; t:=1; que[1]:=source;
    while h<t do
    begin
        inc(h);
        cur:=que[h];
        q:=last[cur];
        while q<>0 do
        begin
            p:=other[q];
            if (judge(len[q])>0) and (d[p]=0) then
            begin
                inc(t);
                que[t]:=p;
                d[p]:=d[cur]+1;
                if p=sink then exit(true);
            end;
            q:=pre[q];
        end;
    end;
    exit(false);
end;
 
function dinic(x:longint;flow:extended):extended;
var
    rest, tmp                   :extended;
    q, p                        :longint;
     
begin
    if x=sink then exit(flow);
    rest:=flow;
    q:=last[x];
    while q<>0 do
    begin
        p:=other[q];
        if (judge(len[q])>0) and (d[p]=d[x]+1) and (rest>0) then
        begin
            tmp:=dinic(p,min(rest,len[q]));
            rest:=rest-tmp;
            len[q]:=len[q]-tmp;
            len[q xor 1]:=len[q xor 1]+tmp;
        end;
        q:=pre[q];
    end;
    exit(flow-rest);
end;
 
procedure main;
var
    l, r, mid                   :extended;
    cur                         :longint;
    ans                         :extended;
    i, j                        :longint;
     
begin
    l:=0; r:=90;
    while r-l>lim do
    begin
        mid:=(l+r)/2;
        fillchar(last,sizeof(last),0);
        tot:=1;
        for i:=1 to n do
            for j:=1 to m do
            begin
                connect(source,num[i,j],key[i,j]);
                connect(num[i,j],source,0);
            end;
         
        for i:=1 to n do
            for j:=1 to m do
            begin
                cur:=0;
                if i=1 then inc(cur,heng[i,j]);
                if i=n then inc(cur,heng[i+1,j]);
                if j=1 then inc(cur,shu[i,j]);
                if j=m then inc(cur,shu[i,j+1]);
                if cur>0 then
                begin
                    connect(num[i,j],sink,cur*mid);
                    connect(sink,num[i,j],0);
                end;
            end;
        for i:=1 to n-1 do
            for j:=1 to m do
            begin
                connect(num[i,j],num[i+1,j],heng[i+1,j]*mid);
                connect(num[i+1,j],num[i,j],heng[i+1,j]*mid);
            end;
        for i:=1 to n do
            for j:=1 to m-1 do
            begin
                connect(num[i,j],num[i,j+1],shu[i,j+1]*mid);
                connect(num[i,j+1],num[i,j],shu[i,j+1]*mid);
            end;
        ans:=0;
        while bfs do
            ans:=ans+dinic(source,maxlongint);
        if judge(sum-ans)>0 then l:=mid else r:=mid;
    end;
    writeln(l:0:3);
end;
 
begin
    init;
    main;
end.

转载于:https://www.cnblogs.com/BLADEVIL/p/3500432.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/292105.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python设置cookie_Python中cookie的设置方法

学习目标:掌握 Cookie 的定义和使用Cookie 定义Cookie&#xff0c;有时也用其复数形式Cookies。指的是由服务端生成, 保存在客户端的一种数据存储形式&#xff0c;内部以 key-value 键值对形式存储&#xff0c; value大小有限制(最大为4kb)&#xff0c; 数据不安全。背景:Cooki…

中国第一个发《Nature》的竟然是清朝人!被皇帝夸天下第一,他却觉得羞耻..........

全世界只有3.14 % 的人关注了爆炸吧知识大清亡了&#xff01;这事在今天讲&#xff0c;算不得惊天动地&#xff0c;你听了之后&#xff0c;还可能微微一笑。作为中国最后一个封建王朝&#xff0c;它先闭关锁国&#xff0c;后又丧权辱国&#xff0c;造成百年前的中国在科学技术方…

【清北学堂】 死亡(death)

M个位置可以打sif&#xff0c;N1个人等着打sif&#xff0c;已知前N个人的时间&#xff0c;问第N1个人什么时候才能打sif&#xff08;不能插队&#xff0c;即必须按顺序来打sif&#xff09; 输入N,M以及每个人所需要的时间&#xff1b;输出第N1个人所需的时间 用优先队列用优先…

码农与UI沟通的日常

事情是这样的&#xff0c;这是一个兴趣群组的效果图。 我看了一眼没有帖子时的提示&#xff0c;觉得这样的提示 不走心 不能展现出我们团队对于人生及世界的深度理解和高尚的品格。 于是&#xff0c;我选择了表达内心的真实感受。 我觉得这完美表达了用户使用时的心声&#xff…

如何实现二次抛异常时保存第一次异常的详细信息?

咨询区 skolima我用反射来尝试调用一个可能会引发异常的方法&#xff0c;我如何将这个异常信息传递给调用者&#xff0c;而不需要通过反射包装器包装它。我目前的是再 throw 一次异常&#xff0c;但这种做法会销毁第一次异常的栈信息&#xff0c;参考如下代码&#xff1a;publi…

linux之cut命令使用和总结

cut是一个选取命令: 就是将一段数据经过分析,取出我们想要的。一般来说,选取信息通常是针对“行”来进行分析的,并不是整篇信息分析的。 (1)其语法格式为:cut [-bn] [file] 或 cut [-c] [file] 或 cut [-df] [file] 使用说明 cut 命令从文件的每一行剪切字节、字符…

flash builder 4.7 debug via usb device iPhone 4s - device not found

http://forums.adobe.com/message/4865192 Please provide more info on the above issue: 1.What is the message shown when you try to debug the application via USB on iOS device ? 2.Are you able to debug on other iOS devices ? Run this below command from comm…

贝叶斯分类器_Sklearn 中的朴素贝叶斯分类器

(给Python开发者加星标&#xff0c;提升Python技能)作者&#xff1a;Martin Mller&#xff0c;翻译&#xff1a;github-sisibelovedhttps://github.com/xitu/gold-miner/blob/master/TODO1/naive-bayes-classifier-sklearn-python-example-tips.md用豆机实现的高斯分布这篇教程…

linux之tr命令使用和总结

1、tr命令介绍 用来从标准输入中通过替换或删除操作进行字符转换。tr主要用于删除文件中控制字符或进行字符转换。使用tr时要转换两个字符串:字符串1用于查询,字符串2用于处理各种转换。tr刚执行时,字符串1中的字符被映射到字符串2中的字符,然后转换操作开始。 带有最常用…

美少女什么味??竟然还有美少女风味泡面......

1 毕业后第一次参加聚餐&#xff08;via&#xff1a;刘燕铭&#xff09;▼2 建议使用摩斯密码&#xff0c;谢谢▼3 隆马戏&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼4 真的很谢谢▼5 啊&#xff0c;哪里买呢&#xff08;via&#xff1a;Zero 浅忆&#xff09;…

ABP vNext微服务架构详细教程——身份管理服务

1框架搭建ABP vNext创建包含app和module两种模板&#xff0c;其中app方式所创建的模板包含用户、角色、权限管理&#xff0c;ABP基础配置IdentityServer的基础配置数据等功能。module模式是一个比较干净的服务&#xff0c;里面不包含默认业务功能。ABP vNext创建包含app和modul…

ubuntu安装时发现GPT分区表,无法安装问题

光盘安装时&#xff0c;先试用ubuntu&#xff0c;输入命令&#xff1a; sudo dd if/dev/zero of/dev/sda bs1 count8 seek512再用光盘引导安装即可。转载于:https://www.cnblogs.com/chengliu/p/3636343.html

双网卡上网冲突解决_【技术文章】局域网IP地址冲突罪魁祸首是什么?这几点要注意!(附高手处理方法)...

现如今&#xff0c;人们的生活处处离不开网络。单位办公信息化对网络的依赖则更大。为了提升安全管理和信息化水平&#xff0c;很多单位不仅建设了完善的办公信息系统&#xff0c;还部署了视频监控。但由于缺乏整体规划&#xff0c;或选择网络产品时考虑欠周&#xff0c;导致网…

异常分析

一、请阅读并运行AboutException.java示例&#xff0c;然后通过后面的几页PPT了解Java中实现异常处理的基础知识。 &#xff08;1&#xff09;源代码;import javax.swing.*; class AboutException { public static void main(String[] a) { int i1, j0, k; ki/j; try { k i/j…

linux c之wait和waitpid函数的用法和总结

1、wait和waitpid函数的介绍 1) wait()函数用于使父进程(也就是调用wait()的进程)阻塞,直到一个子进程结束或者该进程接收到了一个指定的信号为止。如果该父进程没有子进程或者它的子进程已经结束,则wait()函数就会立即返回。 2) waitpid()的作用和wait()一样,但它并不一…

微软开发者的年度回顾

2021 年 .NET 和 Microsoft 开发人员的技术都发生了什么&#xff1f;很难从 2021 年只选择一个主题。安静的进化&#xff1f;开源的争议&#xff1f;一个让开发人员疑惑的操作系统更新&#xff1f;当我回头看时, 发现一年发生了很多事情, 2021 年的发展是稳步向前的&#xff0c…

我是永远不可能出轨的,除非......

1 当爸妈学会了抠图&#xff08;素材来源豆瓣&#xff0c;侵删&#xff09;▼2 帮我带瓶我平时常喝的水&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼3 我们是被资本凑在一起的联姻&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼4 我是不会出轨的&…

个人控件/对象命名规范(慢慢更新)

自己收集自网络&#xff0c;转载本文请保留来源&#xff08;否则以后我这边更新了&#xff0c;不写转载来源的坑爹了&#xff09; 控件/对象类型前缀AppBar只有一个&#xff1a;appBar/多个&#xff1a;suffix:XXXAppBarAppBarButtonbtnBorderbrdButtonbtnCanvascnvCheckBoxchk…

页面滚动固定

实例代码&#xff1a; 1 $(document).scroll(function () {2 3 var $leftBox $(.lFixedBlock),4 $rightBox $(.rFixedBlock),5 leftBoxHeight $leftBox.height(),6 rightBoxHeight $rightBox.height(),7 …

python listbox排序_python – 从tkinter.Listbox中提取项目列表

我编写了以下tkinter脚本来了解如何将数据列表添加到tkinter.Listbox小部件中.我发现了两种方法.接下来,我想从tkinter.Listbox小部件中提取相同的列表.在4种不同的方法中,我只设法让第4种方法(即e4)起作用.如何使e1,e2和e3方法起作用&#xff1f;最终目标是获取最初提供给tkin…