1 (*
2 *Problem: NOI2006 最大获利
3 *Author : Chen Yang
4 *Time : 2012.6.2 8:00 am
5 *State : Solved
6 *Memo : 网络流、最大流最小割
7 *)
8 program profit;
9 const maxn=60000;
10 max=100000000;
11 type
12 ty1=^ty2;
13 ty2=record
14 x,f:longint;
15 next,up:ty1;
16 end;
17
18 var
19 n,m,i,x,y,z,s,t,tot,ans:longint;
20 first:array[0..maxn] of ty1;
21 d,vd:array[0..maxn] of longint;
22 //=======================
23 function min(a,b:longint):longint; inline;
24 begin if a<b then exit(a) else exit(b); end;
25 //=======================
26 procedure insert(x,y,z:longint); inline;
27 var
28 p,q:ty1;
29 begin
30 new(p);
31 p^.x:=y; p^.f:=z;
32 p^.next:=first[x]; first[x]:=p;
33 new(q);
34 q^.x:=x; q^.f:=0;
35 q^.next:=first[y]; first[y]:=q;
36 q^.up:=p; p^.up:=q;
37 end;
38 //=======================
39 function sap(x,flow:longint):longint;
40 var
41 p:ty1;
42 tmp:longint;
43 begin
44 if x=t then exit(flow);
45 sap:=0;
46 p:=first[x];
47 while p<>nil do
48 begin
49 if (p^.f>0)and(d[p^.x]+1=d[x]) then
50 begin
51 tmp:=sap(p^.x,min(flow-sap,p^.f));
52 dec(p^.f,tmp);
53 inc(p^.up^.f,tmp);
54 inc(sap,tmp);
55 if sap=flow then exit;
56 end;
57 p:=p^.next;
58 end;
59 if d[s]=tot then exit;
60 dec(vd[d[x]]);
61 if vd[d[x]]=0 then d[s]:=tot;
62 inc(d[x]); inc(vd[d[x]]);
63 end;
64 //=======================
65 begin
66 assign(input,'profit.in'); reset(input);
67 assign(output,'profit.out'); rewrite(output);
68 read(n,m); s:=0; t:=n+m+1;
69 for i:=1 to n do
70 begin
71 read(x); insert(s,i,x);
72 end;
73 for i:=n+1 to n+m do
74 begin
75 read(x,y,z);
76 insert(x,i,max); insert(y,i,max);
77 insert(i,t,z); inc(ans,z);
78 end;
79 tot:=n+m+2; vd[0]:=tot;
80 while d[s]<tot do dec(ans,sap(s,maxlongint));
81 writeln(ans);
82 close(input); close(output);
83 end.