P2711 小行星

这到题目的题面很整洁,让我觉得是一道难题。

结果是跟 教辅的形成 一样的题目。

看条件就知道是最小割:

  • 切一个面切很多个点 \(->\) 切这个面的第一个点可以一起切后面的很多个点。(一共有三个面)
  • 让你最快的切完所有点。

换成教辅的形成的说法:

  • 一本教材配对一个答案配对一个练习册。
  • 让你找出最多可以有多少本配套的教材。

双倍经验? (雾雨

// luogu-judger-enable-o2
Uses math;

var
    value,reach,next,from:array[-1..2100000] of longint;
    gap,dis,cnt:array[-1..810000] of longint;
    n,m,l,r,k,i,j,sum,tot,sink,source,number,maxflow:longint;

procedure add(l,r,sum:longint);
begin
    inc(tot); from[tot]:=l; reach[tot]:=r; value[tot]:=sum; next[tot]:=cnt[l]; cnt[l]:=tot;
    inc(tot); from[tot]:=r; reach[tot]:=l; value[tot]:=8-8; next[tot]:=cnt[r]; cnt[r]:=tot;
end;

function Dfs(now,flow:longint):longint;
var i,k,mindis,ret:longint;
begin
    mindis:=n-1; ret:=flow;
    if now=sink then exit(flow);
    i:=cnt[now];
    while i<>-1 do
    begin
        if value[i]>0 then
        begin
            if dis[now]=dis[reach[i]]+1 then
            begin
                k:=Dfs(reach[i],min(ret,value[i]));
                dec(value[i],k);inc(value[i xor 1],k);
                dec(ret,k);
                if dis[source]>=n then exit(flow-ret);
                if ret=0 then break;
            end;
             mindis:=min(mindis,dis[reach[i]]);
        end;
        i:=next[i];
    end;
    if ret=flow then
    begin
        dec(gap[dis[now]]);
        if gap[dis[now]]=0 then dis[source]:=n;
        dis[now]:=mindis+1;
        inc(gap[dis[now]]);
    end;
    exit(flow-ret);
end;

begin
    filldword(cnt,sizeof(cnt) div 4,maxlongint*2+1); tot:=1;
    read(n); source:=1; sink:=(n << 1+1) << 1;
    for i:=1 to n do begin add(source,i+1,1); add(n*3+i+1,sink,1); end;
    for i:=1 to n do
    begin
        read(l,r,k);
        add(l+1,r+n+1,maxlongint);
        add(r+n+1,r+n << 1+1,1);
        add(r+n << 1+1,r+n*3+1,maxlongint);
    end;
    //for i:=2 to tot do if i mod 2=0 then writeln(from[i],' ',reach[i]);
    n:=sink+1; gap[source]:=n;
    while dis[source]<n do inc(maxflow,Dfs(source,maxlongint));
    writeln(maxflow);
end.

posted @ 2019-01-25 21:59  _ARFA  阅读(153)  评论(0编辑  收藏  举报