NOI2006最大獲利

2022-05-12 13:28:59 字數 3085 閱讀 2437

終於搞明白了……

x到y有邊意味著選x必須選y,所以才會有閉合子圖中乙個點的後繼一定也在這個閉合子圖中。

接下來按照s連正權,負權連t就ok了

1

type node=record

2go,next,c:longint;

3end;4

vari,n,m,s,t,max,tmp,ans,tot,x,y,z:longint;

5 h,first,q,cur:array[0..100000] of

longint;

6 e:array[0..500000] of

node;

7function

min(x,y:longint):longint;

8begin

9if xthen exit(x) else

exit(y);

10end;11

procedure

insert(x,y,z:longint);

12begin

13inc(tot);

14 e[tot].go:=y;

15 e[tot].c:=z;

16 e[tot].next:=first[x];

17 first[x]:=tot;

18inc(tot);

19 e[tot].go:=x;

20 e[tot].c:=0

;21 e[tot].next:=first[y];

22 first[y]:=tot;

23end;24

procedure

init;

25begin

26readln(n,m);

27 s:=0;t:=m+n+1;tot:=1;28

for i:=1

to n do

29begin

30read(x);

31insert(s,i,x);

32end

;33 max:=0;34

for i:=1

to m do

35begin

36readln(x,y,z);inc(max,z);

37 insert(n+i,t,z);

38 insert(x,n+i,maxlongint>>2

);39 insert(y,n+i,maxlongint>>2

);40

end;

41end;42

function

bfs:boolean;

43var

i,x,y,head,tail:longint;

44begin

45 fillchar(h,sizeof(h),0

);46 head:=0;tail:=1;q[1]:=s;h[s]:=1;47

while headdo

48begin

49inc(head);

50 x:=q[head];

51 i:=first[x];

52while i<>0

do53

begin

54 y:=e[i].go;

55if (h[y]=0) and (e[i].c<>0) then

56begin

57 h[y]:=h[x]+1;58

inc(tail);

59 q[tail]:=y;

60end

;61 i:=e[i].next;

62end;63

end;

64 exit(h[t]<>0

);65

end;

66function

dfs(x,f:longint):longint;

67var

i,tmp,used:longint;

68begin

69if (x=t) or (f=0) then

exit(f);

70 tmp:=0;used:=0

;71 i:=cur[x];

72while i<>0

do73

begin

74 y:=e[i].go;

75if (e[i].c<>0) and (h[y]=h[x]+1) then

76begin

77 tmp:=dfs(y,min(e[i].c,f-used));

78dec(e[i].c,tmp);

79 inc(e[i xor 1

].c,tmp);

80if e[i].c<>0

then cur[x]:=i;

81inc(used,tmp);

82if used=f then

exit(f);

83end

;84 i:=e[i].next;

85end;86

if used=0

then h[x]:=-1;87

exit(used);

88end;89

procedure

dinic;

90begin

91 ans:=0;92

while bfs do

93begin

94for i:=0

to t do cur[i]:=first[i];

95 inc(ans,dfs(0,maxlongint>>2

));96

end;

97end;98

procedure

main;

99begin

100dinic;

101 writeln(max-ans);

102end

;103

begin

104init;

105main;

106end.

NOI2006 最大獲利

description 新的技術正衝擊著手機通訊市場,對於各大運營商來說,這既是機遇,更是挑戰。thu集團旗下的cs t通訊公司在新一代通訊技術血戰的前夜,需要做太多的準備工作,僅就站址選擇一項,就需要完成前期市場研究 站址勘測 最優化等專案。在前期市場調查和站址勘測之後,公司得到了一共n個可以作為...

NOI2006 最大獲利

有n個中轉站,每乙個中轉站修建需要耗費一定費用。有m個使用者人群,每個使用者人群要通話需要有a b 兩個中轉站,滿足這個使用者人群後會獲利p。問最大獲利是多少?有正權,有負權,還有依賴關係,決定就是你啦,最大權值閉合子圖!建模就不分析了,套路題目。luogu 4174 bzoj 1497 cogs ...

NOI2006 最大獲利

把使用者和中轉站分成兩類,就是乙個二分圖了。注意到我們選擇了乙個使用者群,就必須要選擇對應的中轉站來付出代價。這不就是乙個最大權閉合子圖嘛 直接上最小割即可 如下 include include include include include include define s 0 define t ...