bzoj1497 NOI2006 最大獲利

2022-08-13 23:36:17 字數 2100 閱讀 6082

新的技術正衝擊著手機通訊市場,對於各大運營商來說,這既是機遇,更是挑戰。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公司可以有選擇的建立一些中轉站(投入成本),為一些使用者提供服務並獲得收益(獲益之和)。那麼如何選擇最終建立的中轉站才能讓公司的淨獲利最大呢?(淨獲利 = 獲益之和 - 投入成本之和)

輸入檔案中第一行有兩個正整數n和m 。第二行中有n個整數描述每乙個通訊中轉站的建立成本,依次為p1, p2, …, pn 。以下m行,第(i + 2)行的三個數ai, bi和ci描述第i個使用者群的資訊。所有變數的含義可以參見題目描述。

你的程式只要向輸出檔案輸出乙個整數,表示公司可以得到的最大淨獲利。

5 51 2 3 4 5

1 2 3

2 3 4

1 3 3

1 4 2

4 5 3

【樣例說明】選擇建立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。

標準的最大權閉合圖模型。

q: 什麼是最大權閉合圖?

a: 閉合圖為有向圖的乙個點集,且該點集所有出邊都指向該點集。

最大權閉合圖為有向圖中點權之和最大的閉合圖。

q: 最大權閉合圖的特點?

a: 若存在 \(\in\) e ,那閉合圖中包括u的前提必要條件為v在該閉合圖中。

而最大權閉合圖可用最小割求解。

(證明過程詳見hbt大神**《最小割模型在資訊學競賽中的應用》orzorz…)

這道題中,若想在某使用者處獲得收益,前提是建立該使用者會使用的中轉站。

相當於是乙個圖,節點為使用者及中轉站,每個使用者向他會使用的2個中轉站連邊。

代表使用者的點點權為ci,代表中轉站的點點權為pi。

求該圖最大權閉合圖。

#include#include#include#define inf 200000000

using namespace std;

const int n = 5005;

const int m = 50005;

struct nodepool[m*8+n*4],*h[n+m];

int cnt;

void addedge(int u,int v,int f)

int s,t;

int level[n+m];

int que[n+m];

bool bfs()

if(level[t]!=-1) return true;

}return false;

}int find(int u,int f)

}if(!s) level[u]=-1;

return s;

}int dinic()

int n,m;

int a[m],b[m],c[m],d[n];

int main()

for(int i=1;i<=n;i++)

addedge(m+i,t,d[i]);

sum-=dinic();

printf("%d\n",sum);

return 0;

}

BZOJ1497 NOI2006 最大獲利

什麼是最大權閉合子圖 先解釋一下有向圖的閉合圖 閉合圖內任意點的任意後繼也一定還在閉合圖中。物理意義 事物間依賴關係 乙個事件要發生,它需要的所有前提也都一定要發生。最大權閉合圖 點權之和最大的閉合圖 最大權閉合圖構圖方法 1.增加源s匯t 2.源s連線原圖的正權點,容量為相應點權 3.原圖的負權點...

bzoj 1497 NOI2006最大獲利

我對題意的理解 給出一堆公司和一堆使用者,我們買公司需要花錢,每個使用者會支付報酬當且僅當他所鍾愛的兩個公司我都買了,問最大獲利 最大權閉合子圖 好厲害的樣子 首先我們連邊最小割ans 答案就是sum ans 這個可以想,sum表示在不需要支出的情況下的獲利,現在我們需要支出,所以要跑一遍最小割。感...

bzoj1497 NOI2006 最大收益

最小割 思路比較簡單 點數看起來很多但是因為是類似二分圖的東西所以跑的比較快 源點對每個使用者連容量為收益的邊 使用者向中轉站連容量無窮大的邊 中轉站向匯點連容量為成本的邊 要麼割掉使用者帶來的收益 要麼割掉成本 include include include using namespace std...