BZOJ3597 SCOI2014 Coconut - Hoblovski's Blog - 想拿Ag的蒟蒻.已经Ag滚出.
BZOJ3595 SCOI2014 Onlinejudge
BZOJ3287 Mato刷屏计划

BZOJ3597 SCOI2014 Coconut

Hoblovski posted @ 2014年6月23日 22:13 in Solutions with tags SCOI SPFA bzoj 分数规划 , 1226 阅读
要是我考场多想一步就说不定能A了然后就能A队了然后就不用每天Orz了
 
题意
    给定有源汇的有向无环网络,每条弧的属性有<弧头,弧尾;a,b,c,w>
    a是把这条弧容量加一的代价,b是把这条弧容量减一的代价
    c是这条弧的容量,w是一单位容量物资通过这条弧的代价
    连接源的弧只有一条出弧,约定该弧不可修改
    现在已知网络满载,定义一次操作为选择某弧把其容量加一或减一
    设进行k次修改,减少P的代价,在网络仍然满载的情况下最大化P/k
    保证答案为正,N!>500,M!>3000,a,b!>50,c,w!>10000
 
Tag 分数规划 乱搞
 
省选赛场上想出来了分数规划,图论模型建出来因为负环费用流跪了
于是只好[神奇贪心],感觉不超过10分.今天再做,然后理不清楚
没办法去看七中爷的Blog的题解,然后1A.看来过于抽象也是不好的www.
 
自己叙述方法
先来证明引理
    1.最终总流量不变 显然
    2.1成立当且仅当任何非源汇的点在修改后入流量等于出流量 显然
 
设边i 减少的容量为X,增加的容量为Y则由流量平衡,对于任何点有
        Sigma(入C)+Sigma(入Y)-Sigma(入X)=Sigma(出C)+Sigma(出Y)+Sigma(出X)
化简为  Sigma(入Y)+Sigma(出X)=Sigma(出Y)+Sigma(入X)    记为式[1]
设答案为λ可得
目标    Maximise λ = 
等价于
    g(λ)=
找到g(λ)的零点
 
如果把两个括号里面的东西看作边权,那么这个g(λ)就可以某种意义上写成
    Sigma(边权*边经过次数)+Sigma(边权*边经过次数)
X,Y看成边经过次数.惊喜的发现上面的式[1]正是环行走(一个不一定是简单回路的环)的等式
然后我们只需要找到最大的λ使得按这个λ构图后图中有负环.之后二分即可
 
以下是七中爷的叙述

 DAY2 T1:比较裸的分数规划

 很容易想到先二分答案判断可行

 我们直接把加流量的操作视为反边,减流量的操作视为正边,那么验证答案是否可行就是在找一个负环。

 假如当前二分的答案为K,那这条边正边(加流量)就是ui通向vi,代价为bi+wi+K,负边(减流量)就是vi通向ui,代价  ai+K-wi,

 然后随便跑个算法判断负环就可以了。唯一要注意的是流量为0的边无法再减流量了。

 考场上得了90分,有个点WA了,和答案相差很远,原因不详。。。

 

 第一题一眼分数规划,加大一条边流量1的费用为b+w,减小流量1的费用为a-w

 然后按这个建图,如果有负环那么沿着这条路走不回减小流量,但是会减小费用

 减小多少就是这个环的权值和,然后要让平均每条边的费用最大...

 

然后DFS的SPFA太神了不会写orzzz

program bzoj3597;

type tnode=record
        n,ow,next:longint;
        w:extended;
     end;

const inf=1e43;
      maxn=517;
      maxm=10017;
      maxw=1017;

var g,q,enq:array[0..maxn] of longint;
    d:array[0..maxn] of extended;
    v:array[0..maxn] of boolean;
    mem:array[0..maxm] of tnode;
    n,m,memsize,frt,rer:longint;

procedure insnbs(u,v,iw:longint);
begin
inc(memsize); with mem[memsize] do begin
        n:=v; ow:=iw; next:=g[u];
end; g[u]:=memsize;
end;

function spfa(u:longint):boolean;
var head,tail,t1:longint;
begin
frt:=0; rer:=1; q[1]:=u; v[u]:=true; enq[u]:=1; d[u]:=0;
while frt<>rer do begin
        frt:=frt mod maxn+1; head:=q[frt]; t1:=g[head];
        while t1<>0 do begin
                tail:=mem[t1].n; if d[head]+mem[t1].w<d[tail] then begin
                        d[tail]:=d[head]+mem[t1].w; if not v[tail] then begin
                                rer:=rer mod maxn+1; q[rer]:=tail; v[tail]:=true;
                                inc(enq[tail]); if enq[tail]>n+2 then exit(true);
                        end;
                end; t1:=mem[t1].next;
        end; v[head]:=false;
end; exit(false);
end;

procedure makegraph(lambda:extended);
var i:longint;
begin
fillchar(enq,sizeof(enq),0); fillchar(v,sizeof(v),0);
for i:=1 to n+2 do d[i]:=inf;
for i:=1 to memsize do mem[i].w:=mem[i].ow+lambda;
end;

procedure init;
var i,u,v,a,b,c,w:longint;
begin
fillchar(g,sizeof(g),0); memsize:=0;
readln(n,m); for i:=1 to m do begin
        readln(u,v,a,b,c,w);
        if (u=n+1)or(v=n+1) then continue;
        insnbs(u,v,b+w); if c>0 then insnbs(v,u,a-w);
end;
end;

function ans:extended;
var l,r,mid:extended;
begin
l:=0; r:=maxw; while r-l>1e-4 do begin
        mid:=(l+r)/2; makegraph(mid);
        if spfa(n+2) then l:=mid else r:=mid;
end; exit(l);
end;

begin
init;
writeln(ans:0:2);
end.
Avatar_small
Canara Bank Balance 说:
2021年12月24日 19:00

In past days customers needed to visit a bank branch to know their account balance check after ATMs were implemented, and they became one of the sources to see the balance inquiry. Later, the internet spread to every place banking services digitized, so everything went online. Canara Bank Balance Check To ensure that all users can benefit from these services, the bank has developed many methods for accessing and checking bank data such as bank balance, Canara bank mini statement, latest transactions, etc.

Avatar_small
HP Plus Two Blueprin 说:
2022年5月21日 14:11

HP board is Here to declare HP 12th class Model Paper 2023 PDF, but we cannot confirm it until the board makes an official announcement, which is still awaited. Therefore, HPBOSE 12th class students are advised to HP Plus Two Blueprint 2023 stay calm and wait until the Model Paper 2023 is officially Download by HP board at HP board official


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter