最后两点怎么搞都要30s+,但是我不会什么优化啊…暂时就这样吧。Dinic的时间复杂度是O(N^2*M)

这题和TDL的幼儿园模板是一样的。

这次写网络流给自己计时了,大约是40min左右,后来都跑去倒腾后面两组数据去了…

program profit;
type ptype=^node;
node=record
v,w,flow:longint;
next:ptype;
end;
const maxn=+;
inf=maxlongint div ;
var head:array[..maxn] of ptype;
visit:array[..maxn] of boolean;
d,q:array[..maxn] of longint;
n,m,i,j,sta,tar,v,a,b,c,cn:longint;
procedure insert(st,ed,r:longint);
var p,q,pre:ptype;
begin
new(p);
p^.v:=ed;p^.w:=r;p^.flow:=;p^.next:=nil;
q:=head[st];
if q=nil then head[st]:=p
else
begin
while q^.next<>nil do q:=q^.next;
q^.next:=p;
end;
end; function min(a,b:longint):longint;
begin
if a<b then exit(a) else exit(b);
end; function bfs:boolean;
var star,rear,x:longint;
y:ptype;
begin
fillchar(visit,sizeof(visit),false);
fillchar(q,sizeof(q),);
fillchar(d,sizeof(d),);
star:=;rear:=;q[star]:=sta;d[star]:=;visit[sta]:=true;
while star<=rear do
begin
x:=q[star];
y:=head[x];
while y<>nil do
begin
if (not visit[y^.v]) and (y^.w>y^.flow) then
begin
inc(rear);
q[rear]:=y^.v;
visit[y^.v]:=true;
d[y^.v]:=d[x]+;
end;
y:=y^.next;
end;
inc(star);
end;
bfs:=visit[tar];
end; procedure decflow(st,ed,delta:longint);
var y:ptype;
begin
y:=head[st];
while y^.v<>ed do y:=y^.next;
dec(y^.flow,delta);
end; function addflow(p,maxflow:longint):longint;
var y:ptype;
o:longint;
begin
if (p=tar) or (maxflow=) then exit(maxflow);
addflow:=;
y:=head[p];
while y<>nil do
begin
if (d[y^.v]=d[p]+) and (y^.w>y^.flow) then
begin
o:=addflow(y^.v,min(maxflow,y^.w-y^.flow));
if o> then
begin
inc(y^.flow,o);
decflow(y^.v,p,o);
inc(addflow,o);
dec(maxflow,o);
if maxflow= then break;
end;
end;
y:=y^.next;
end;
end; function network:longint;
begin
network:=;
while bfs do
inc(network,addflow(sta,inf));
end; begin
assign(input,'profit9.in');reset(input);
assign(output,'profit9.out');rewrite(output);
readln(n,m);
sta:=;tar:=m+n+;
for i:= to n do
begin
read(v);
insert(m+i,tar,v);
insert(tar,m+i,);
end;
readln;
for i:= to m do
begin
readln(a,b,c);
insert(i,m+a,inf);insert(m+a,i,);
insert(i,m+b,inf);insert(m+b,i,);
insert(sta,i,c);insert(i,sta,);
cn:=cn+c;
end;
writeln(cn-network);
close(input);close(output);
end.

profit

后来写了个优化是我之前自己发明的decflow,现在我在每条边加了一个域op,指向反向边。速度没有什么提升=w=

program profit2;
type ptype=^node;
node=record
v,w,flow:longint;
next,op:ptype;
end;
const maxn=+;
inf=maxlongint div ;
var head:array[..maxn] of ptype;
visit:array[..maxn] of boolean;
d,q:array[..maxn] of longint;
n,m,i,j,sta,tar,v,a,b,c,cn:longint;
procedure insert(st,ed,r1,r2:longint);
var p,q,pre,loc1,loc2:ptype;
begin
new(p);
p^.v:=ed;p^.w:=r1;p^.flow:=;p^.next:=nil;
q:=head[st];
if q=nil then head[st]:=p
else
begin
while q^.next<>nil do q:=q^.next;
q^.next:=p;
end;
loc1:=p;
new(p);
p^.v:=st;p^.w:=r2;p^.flow:=;p^.next:=nil;
q:=head[ed];
if q=nil then head[ed]:=p
else
begin
while q^.next<>nil do q:=q^.next;
q^.next:=p;
end;
loc2:=p;
loc1^.op:=loc2;
loc2^.op:=loc1;
end; function min(a,b:longint):longint;
begin
if a<b then exit(a) else exit(b);
end; function bfs:boolean;
var star,rear,x:longint;
y:ptype;
begin
fillchar(visit,sizeof(visit),false);
fillchar(q,sizeof(q),);
fillchar(d,sizeof(d),);
star:=;rear:=;q[star]:=sta;d[star]:=;visit[sta]:=true;
while star<=rear do
begin
x:=q[star];
y:=head[x];
while y<>nil do
begin
if (not visit[y^.v]) and (y^.w>y^.flow) then
begin
inc(rear);
q[rear]:=y^.v;
visit[y^.v]:=true;
d[y^.v]:=d[x]+;
end;
y:=y^.next;
end;
inc(star);
end;
bfs:=visit[tar];
end; function addflow(p,maxflow:longint):longint;
var y:ptype;
o:longint;
begin
if (p=tar) or (maxflow=) then exit(maxflow);
addflow:=;
y:=head[p];
while y<>nil do
begin
if (d[y^.v]=d[p]+) and (y^.w>y^.flow) then
begin
o:=addflow(y^.v,min(maxflow,y^.w-y^.flow));
if o> then
begin
inc(y^.flow,o);
dec(y^.op^.flow,o);
inc(addflow,o);
dec(maxflow,o);
if maxflow= then break;
end;
end;
y:=y^.next;
end;
end; function network:longint;
begin
network:=;
while bfs do
inc(network,addflow(sta,inf));
end; begin
assign(input,'profit10.in');reset(input);
assign(output,'profit10.out');rewrite(output);
readln(n,m);
sta:=;tar:=m+n+;
for i:= to n do
begin
read(v);
insert(m+i,tar,v,);
//insert(tar,m+i,);
end;
readln;
for i:= to m do
begin
readln(a,b,c);
insert(i,m+a,inf,);//insert(m+a,i,);
insert(i,m+b,inf,);//insert(m+b,i,);
insert(sta,i,c,);//insert(i,sta,);
cn:=cn+c;
end;
writeln(cn-network);
close(input);close(output);
end.

profit2

[NOI 2006] 最大获利 80分的更多相关文章

  1. [BZOJ 1497][NOI 2006]最大获利(最大权闭合子图)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1497 分析: 这是在有向图中的问题,且边依赖于点,有向图中存在点.边之间的依赖关系可以 ...

  2. NOIP 2016 天天爱跑步 80分暴力

    题目描述 小c同学认为跑步非常有趣,于是决定制作一款叫做<天天爱跑步>的游戏.«天天爱跑步»是一个养成类游戏,需要玩家每天按时上线,完成打卡任务. 这个游戏的地图可以看作一一棵包含 个结点 ...

  3. [关于SQL]查询成绩都大于80分的学生

    1.用一条SQL语句 查询出每门课都大于80分的学生姓名name kecheng fenshu张三 语文 81张三 数学 75李四 语文 76李四 数学 90王五 语文 81王五 数学 100王五 英 ...

  4. 用一条SQL语句查出每门课都大于80分的学生的姓名

    用一条SQL语句查出每门课都大于80分的学生的姓名,数据表结构如下: 建表SQL如下: ; -- ---------------------------- -- Table structure for ...

  5. 根据考试成绩输出对应的礼物,90分以上爸爸给买电脑,80分以上爸爸给买手机, 60分以上爸爸请吃一顿大餐,60分以下爸爸给买学习资料。 要求:该题使用多重if完成

    package com.Summer_0417.cn; import java.util.Scanner; /** * @author Summer * 根据考试成绩输出对应的礼物, * 90分以上爸 ...

  6. 案例2:用一条SQL查询出数学语文成绩都大于80分的学生姓名?

    方法1: 查出科目成绩有小于80分的学生姓名,再约束并去重学生不等于查出来的姓名 select distinct A.name from t_score A where A.name not in(s ...

  7. 第一个spring冲刺团队贡献分(80分满分)

    团队贡献分(80分满分): 李泳江 24 叶煜稳 26 谢洪跃 18 周伟雄 12

  8. 【mysql经典题目】科目成绩都大于80分\每个科目的第一名\总成绩排名

    参考:http://blog.csdn.net/lifushan123/article/details/44948135 1.查询出科目成绩都大于80分的学生的名字? drop table if EX ...

  9. SQL查询出每门课都大于80 分的学生姓名

    Course表如下: 查询出每门课都大于80 分的学生姓名有两种方法. 1.select  distinct name from Course where name not in (select di ...

随机推荐

  1. Download Oracle Forms 6i

    To download Oracle Forms Developer 6i from Oracle click this link http://download.oracle.com/otn/nt/ ...

  2. C#的四种Timer介绍

    一.Timer的几个类别 1.System.Threading.Timer 2.System.Timers.Timer 3.System.Windows.Forms.Timer 4.System.Wi ...

  3. HDU 5968 异或密码

    p.MsoNormal { margin: 0pt; margin-bottom: .0001pt; text-align: justify; font-family: Calibri; font-s ...

  4. Nodejs的安装及配置

    1.从Nodejs官网下载安装包,进行安装,是否安装成功,可以从cmd npm去检查,出现如下界面,就表示安装成功 2.打开Webstorm进行配置,(如果安装前打开webstorm了,需要重启web ...

  5. OpenCV学习笔记(二)——OpenCV环境变量配置

    1.  假定电脑上已经安装了VS2010程序,若没有,首先安装vs2010. 下载OpenCV,下载的文件名为"OpenCV-2.3.1-win-superpack". 2.  解 ...

  6. try-catch

    try{ // 程序代码 }catch(异常类型1 异常的变量名1){ // 程序代码 }catch(异常类型2 异常的变量名2){ // 程序代码 }catch(异常类型2 异常的变量名2){ // ...

  7. //解决validator验证插件多个name相同只验证第一的问题

    //解决validator验证插件多个name相同只验证第一的问题 var validatorName = function () { if ($.validator) { $.validator.p ...

  8. SSH框架总结

    首先,SSH是由多个框架(struts+spring+hibernate)的集成,是目前较流行的一种Web应用程序开源集成框架,用于构建灵活.易于扩展的多层Web应用程序. 集成SSH框架的系统从职责 ...

  9. Python下载进度条

    import dialog,e32,appuifw def ru(x):return x.decode('utf8') def qu(): appuifw.note(ru('已取消')) wait.c ...

  10. C3P0的两种使用方法

    方法一: package   C3P0; import   java.sql.Connection; import   java.sql.SQLException; import   java.bea ...