1497: [NOI2006]最大獲利 - BZOJ

來源:互聯網
上載者:User

標籤:

Description

新的技術正衝擊著手機通訊市場,對於各大電訊廠商來說,這既是機遇,更是挑戰。THU集團旗下的CS&T通訊公司在新一代通訊技術血戰的前夜,需要做太多的準備工作,僅就站址選擇一項,就需要完成前期市場研究、站址勘測、最佳化等項目。在前期市場調查和站址勘測之後,公司得到了一共N個可以作為通訊訊號中轉站的地址,而由於這些地址的地理位置差異,在不同的地方建造通訊中轉站需要投入的成本也是不一樣的,所幸在前期調查之後這些都是已知資料:建立第i個通訊中轉站需要的成本為Pi(1≤i≤N)。另外公司調查得出了所有期望中的使用者群,一共M個。關於第i個使用者群的資訊概括為Ai, Bi和Ci:這些使用者會使用中轉站Ai和中轉站Bi進行通訊,公司可以獲益Ci。(1≤i≤M, 1≤Ai, Bi≤N) THU集團的CS&T公司可以有選擇的建立一些中轉站(投入成本),為一些使用者提供服務並獲得收益(獲益之和)。那麼如何選擇最終建立的中轉站才能讓公司的淨獲利最大呢?(淨獲利 = 獲益之和 - 投入成本之和)
Input

輸入檔案中第一行有兩個正整數N和M 。第二行中有N個整數描述每一個通訊中轉站的建立成本,依次為P1, P2, …, PN 。以下M行,第(i + 2)行的三個數Ai, Bi和Ci描述第i個使用者群的資訊。所有變數的含義可以參見題目描述。
Output

你的程式只要向輸出檔案輸出一個整數,表示公司可以得到的最大淨獲利。
Sample Input
5 5
1 2 3 4 5
1 2 3
2 3 4
1 3 3
1 4 2
4 5 3
Sample Output
4
HINT

【範例說明】選擇建立1、2、3號中轉站,則需要投入成本6,獲利為10,因此得到最大收益4。【評分方法】本題沒有部分分,你的程式的輸出只有和我們的答案完全一致才能獲得滿分,否則不得分。【資料規模和約定】 80%的資料中:N≤200,M≤1 000。 100%的資料中:N≤5 000,M≤50 000,0≤Ci≤100,0≤Pi≤100。

 

裸的最大權閉合圖

詳情請見胡伯濤《最小割模型在資訊學競賽中的應用》中最大權閉合圖

第一次被逼用當前弧最佳化,這種類似於二分圖的還是要用當前弧最佳化才跑得快,或者用dinic

  1 const  2     maxn=5050;  3     maxm=50500;  4     inf=10000000;  5 var  6     first:array[0..maxn+maxm]of longint;  7     next,last,liu:array[0..maxn*2+maxm*6]of longint;  8     n,m,tot,sum:longint;  9   10 procedure insert(x,y,z:longint); 11 begin 12     inc(tot); 13     last[tot]:=y; 14     next[tot]:=first[x]; 15     first[x]:=tot; 16     liu[tot]:=z; 17 end; 18   19 procedure init; 20 var 21     i,x:longint; 22 begin 23     tot:=1; 24     read(n,m); 25     for i:=1 to n do 26         begin 27             read(x); 28             insert(0,i,x); 29             insert(i,0,0); 30         end; 31     for i:=n+1 to m+n do 32         begin 33             read(x); 34             insert(x,i,inf); 35             insert(i,x,0); 36             read(x); 37             insert(x,i,inf); 38             insert(i,x,0); 39             read(x);inc(sum,x); 40             insert(i,n+m+1,x); 41             insert(n+m+1,i,0); 42         end; 43 end; 44   45 var 46     dis,vh,pre,his,now:array[0..maxn+maxm]of longint; 47     flow:longint; 48   49 procedure sap; 50 var 51     i,j,jl,min,aug:longint; 52     flag:boolean; 53 begin 54     vh[0]:=n+m+2; 55     for i:=0 to n+m+1 do now[i]:=first[i]; 56     aug:=inf;i:=0; 57     while dis[i]<n+m+2 do 58         begin 59             his[i]:=aug; 60             flag:=false; 61             j:=now[i]; 62             while j<>0 do 63                 begin 64                     if (liu[j]>0) and (dis[i]=dis[last[j]]+1) then 65                     begin 66                         if liu[j]<aug then aug:=liu[j]; 67                         now[i]:=j; 68                         pre[last[j]]:=j; 69                         flag:=true; 70                         i:=last[j]; 71                         if i=n+m+1 then 72                         begin 73                             inc(flow,aug); 74                             while i<>0 do 75                                 begin 76                                     dec(liu[pre[i]],aug); 77                                     inc(liu[pre[i]xor 1],aug); 78                                     i:=last[pre[i]xor 1]; 79                                 end; 80                             aug:=inf; 81                         end; 82                         break; 83                     end; 84                     j:=next[j]; 85                 end; 86             if flag then continue; 87             min:=n+m+1; 88             j:=first[i]; 89             while j<>0 do 90                 begin 91                     if (liu[j]>0) and (dis[last[j]]<min) then 92                     begin 93                         min:=dis[last[j]]; 94                         jl:=j; 95                     end; 96                     j:=next[j]; 97                 end; 98             dec(vh[dis[i]]); 99             if vh[dis[i]]=0 then break;100             dis[i]:=min+1;101             inc(vh[min+1]);102             now[i]:=jl;103             if i<>0 then104             begin105                 i:=last[pre[i]xor 1];106                 aug:=his[i];107             end;108         end;109     writeln(sum-flow);110 end;111  112 begin113     init;114     sap;115 end.
View Code

 

1497: [NOI2006]最大獲利 - BZOJ

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.