• bzoj1066


    练了这么久,应该就成了裸的最大流了吧

    不1Y对不起自己

      1 const inf=1000007;
      2 type node=record
      3        next,point,flow:longint;
      4      end;
      5 
      6 var edge:array[0..200010] of node;
      7     a:array[0..30,0..30] of longint;
      8     p,x,y,numh,h,cur,pre,f:array[0..1010] of longint;
      9     len,ans,sum,t,tot,i,j,n,m,d:longint;
     10     c:char;
     11 
     12 function min(a,b:longint):longint;
     13   begin
     14     if a>b then exit(b) else exit(a);
     15   end;
     16 
     17 procedure add(x,y,f:longint);
     18   begin
     19     inc(len);
     20     edge[len].point:=y;
     21     edge[len].flow:=f;
     22     edge[len].next:=p[x];
     23     p[x]:=len;
     24   end;
     25 
     26 procedure sap;
     27   var u,q,i,j,tmp,neck:longint;
     28   begin
     29     u:=0;
     30     numh[0]:=tot+1;
     31     while h[0]<tot+1 do
     32     begin
     33       if u=tot then
     34       begin
     35         i:=0;
     36         while i<>tot do
     37         begin
     38           j:=cur[i];
     39           dec(edge[j].flow);
     40           inc(edge[j xor 1].flow);
     41           i:=edge[j].point;
     42         end;
     43         u:=0;
     44         inc(ans);
     45       end;
     46       q:=-1;
     47       i:=p[u];
     48       while i<>-1 do
     49       begin
     50         j:=edge[i].point;
     51         if (edge[i].flow>0) and (h[u]=h[j]+1) then
     52         begin
     53           q:=i;
     54           break;
     55         end;
     56         i:=edge[i].next;
     57       end;
     58       if q<>-1 then
     59       begin
     60         cur[u]:=q;
     61         pre[j]:=u;
     62         u:=j;
     63       end
     64       else begin
     65         dec(numh[h[u]]);
     66         if numh[h[u]]=0 then exit;
     67         tmp:=tot+1;
     68         i:=p[u];
     69         while i<>-1 do
     70         begin
     71           j:=edge[i].point;
     72           if edge[i].flow>0 then tmp:=min(tmp,h[j]);
     73           i:=edge[i].next;
     74         end;
     75         h[u]:=tmp+1;
     76         inc(numh[h[u]]);
     77         if u<>0 then u:=pre[u];
     78       end;
     79     end;
     80   end;
     81 
     82 begin
     83   readln(n,m,d);
     84   len:=-1;
     85   fillchar(p,sizeof(p),255);
     86   for i:=1 to n do
     87   begin
     88     for j:=1 to m do
     89     begin
     90       read(c);
     91       if c<>'0' then
     92       begin
     93         inc(t);
     94         f[t]:=ord(c)-48;
     95         x[t]:=i;
     96         y[t]:=j;
     97         a[i,j]:=t;
     98       end;
     99     end;
    100     readln;
    101   end;
    102   for i:=1 to n do
    103   begin
    104     for j:=1 to m do
    105     begin
    106       read(c);
    107       if c='L' then
    108       begin
    109         inc(sum);
    110         add(0,a[i,j],1);
    111         add(a[i,j],0,0);
    112       end;
    113     end;
    114     readln;
    115   end;
    116   tot:=t shl 1+1;
    117   for i:=1 to t do
    118   begin
    119     for j:=i+1 to t do
    120       if d*d>=sqr(x[i]-x[j])+sqr(y[i]-y[j]) then
    121       begin
    122         add(i+t,j,inf);
    123         add(j,i+t,0);
    124         add(j+t,i,inf);
    125         add(i,j+t,0);
    126       end;
    127     if (x[i]+d>n) or (x[i]-d<=0) or (y[i]+d>m) or (y[i]-d<=0) then
    128     begin
    129       add(i+t,tot,inf);
    130       add(tot,i+t,0);
    131     end;
    132     add(i,i+t,f[i]);
    133     add(i+t,i,0);
    134   end;
    135   sap;
    136   writeln(sum-ans);
    137 end.
    View Code
  • 相关阅读:
    android实现简单计算器
    象牙塔尖
    Jquery 限制文本框输入字数【转】
    jquery 文字向上滚动+CSS伪类before和after的应用
    鼠标移入 移出div div会消失的处理
    ionic 项目分享【转】
    JS+CSS简单实现DIV遮罩层显示隐藏【转藏】
    封装鼠标滚轮事件,兼容方法。。。拿去用吧
    3、bootstrap3.0 栅格偏移 布局中的一个特产
    html input[type=file] css样式美化【转藏】
  • 原文地址:https://www.cnblogs.com/phile/p/4473248.html
Copyright © 2020-2023  润新知