最大獲利
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 1
5 51 2 3 4 5
1 2 3
2 3 4
1 3 3
1 4 2
4 5 3
sample output 1
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。
source
bzoj1497
最大點權子圖題目
建立超級源點,超級匯點,源點與正點連線,流量為權值,匯點與負點連線,流量為權值的絕對值。
本來的邊,權值為無窮大。
最後答案=正權點之和 - 最小割
證明:推薦部落格
1、最小割是關於s-t 的簡單割 , 與s或t相連。
證:因為其他邊都是inf
2、每乙個簡單割產生兩個子圖,記含有s點的是圖s,含有t的是圖t,則圖s是閉合圖
閉合圖:選取的點構成的集合中任意一點連線的任意出弧,所指向的點也集合中
證:簡單割中不含有邊權為inf的邊,即不含有連線s和t的邊,也就是s和t不連通。
那麼所有的邊只能連線在圖s之內
3、最小割產生的圖s和圖t,圖s為最大權閉合子圖
最大權閉合子圖:在整個圖中,權值和最大。
記:割集中,所有連線在s上的邊的權值和為 x1 ,所有連線在t上的邊的權值和為x2,那麼割集中所有邊權和為x=x1+x2;
記 圖s中所有點的權值和為w,其中正權值和為w1,負權值和為 -w2. 所以w=w1-w2
而w+x=w1-w2+x1+x2; 其中w2=x2,因為 權值為負的點,必定連線到 t 上。
因而w+x=w1+x1;
顯然x+x1為所有正點權之和,(圖s中的+割集中的),記為sum
故w=sum - x。即 「圖s中所有點的權值和「 = 」整個圖的所有正權值之和「 - 」割集中所有邊權之和「
因為sum為定值,所以只要求最小割即可,這時圖s的所有點的權值和最大,即最大權閉合子圖。
1 #include2using
namespace
std;34
const
int maxn=100010;5
const
int maxm=400010;6
const
int inf=0x3f3f3f3f;7
struct
edgeedge[maxm];
1011
inttol;
12int
head[maxn];
13int
gap[maxn],dep[maxn],cur[maxn];
14void
init()
18void addedge(int u,int v,int w,int rw=0
) 24
25int
q[maxn];
26void bfs(int start,int
end) 42}
43}4445
ints[maxn];
46int sap(int start,int end,int
n) 61}62
for(int i=0;i)
66 ans+=minn;
67 top=inser;
68 u=edge[s[top]^1
].to;
69continue;70
}71bool flag=false;72
intv;
73for(int i=cur[u];i!=-1;i=edge[i].next) 80}
81if
(flag)
86int minn=n;
87for(int i=head[u];i!=-1;i=edge[i].next) 92}
93 gap[dep[u]]--;
94if(!gap[dep[u]]) return
ans;
95 dep[u]=minn+1
;96 gap[dep[u]]++;
97if(u!=start) u=edge[s[--top]^1
].to;98}
99return
ans;
100}
101102
intn,m;
103int
main()
112int sum=0
;113
for(int i=1;i<=m;i++)
121 printf("
%d\n
",sum-sap(0,n+m+1,n+m+1
));122
}123 }
posted @
2019-04-30 18:15
acmerszl 閱讀(
...)
編輯收藏
BZOJ 1497, 最大獲利
傳送門 選擇合理方案新建基站,滿足部分使用者群需要,求最大獲利 淨獲利 獲益之和 投入成本之和 注意到類似於有向無環圖的性質,套用最小割模型中的最大權閉合圖即可。include include const int inf 0u 2,v 55005,e 320005 int n,m,s,t,x,y,z...
BZOJ1497 最大獲利
最大獲利 description 新的技術正衝擊著手機通訊市場,對於各大運營商來說,這既是機遇,更是挑戰。thu集團旗下的cs t通訊公司在新一代通訊技術血戰的前夜,需要做太多的準備工作,僅就站址選擇一項,就需要完成前期市場研究 站址勘測 最優化等專案。在前期市場調查和站址勘測之後,公司得到了一共n...
bzoj 1497 最大獲利(最小割)
傳送門biu 最小割模型,每個中轉站建乙個點,每個使用者建乙個點。有關係的中轉站和使用者之間連inf,s連每個中轉站流量為成本,使用者連t流量為利潤。先獲得所有利潤,割掉中轉站成本或者使用者獲利,所有利潤減最小割即為答案。include using namespace std const int i...