2023年ACM ICPC青島賽區 G題(費用流)

2021-08-28 17:33:26 字數 1333 閱讀 4686

題意:n(n<=200)個地點,m(m<=5000)座橋。

給出每個地點的 人數 和 食物數量。

再給出m行,每行u,v表示哪兩個被一座橋相連,為了保證橋的安全,最多隻允許通過v人,第乙個人通過時橋不會塌,後面的人每通過乙個,橋就會有p的概率塌掉。求怎樣安排,使每個人都有乙份食物,且有橋塌的概率最低,輸出橋塌的概率。

思路:典型費用流。對於人數多的地點,多了幾個人源點就向它連邊容量為多的人數,費用為0。

對於食物多的地點,多了幾份食物它就向匯點連邊,容量為多的食物數,費用為0。

求概率,只需要取log,再跑完最小費用最大流的時候再取回exp(cost)就行了。

注意求的是最小橋塌概率,我們用橋不塌的概率計算費用最後用1減。

但是又要求最短路,於是取-log(1-p),最後再取exp(-cost) ,答案就是用1減去它。

**:

#includeusing namespace std;

const int maxn = 205;

#define inf 1e9

#define eps 1e-8

struct edge

edge(int f,int t,int c,int fl,double co):from(f),to(t),cap(c),flow(fl),cost(co){}

};struct mcmf

void add(int from,int to,int cap,double cost)

bool bellmanford(int &flow,double &cost)}}

} if(d[t]==inf)return false;

flow+=a[t];

cost+=a[t]*d[t];

int u = t;

while(u!=s)

return true;

} double work(int &flow,double &cost)

}mm;

int a[maxn],b[maxn];

int main()

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

int mf;

mm.work(mf,cst);

cst=exp(-cst);

cst=1.00000-cst;

cout

return 0;

}

2023年ACM ICPC青島站感想

打了那麼多地方的區域賽熱身賽,最終獲得青島站乙個名額,還是很驚喜的,因為 再此之前我們學校在 網路賽中從來沒有出過線,此次不容易出線乙個隊伍,真 的感覺很幸運,以前退役的學長聽到這個訊息,也是很開心,學校終於能去 區域賽 看看了,我也覺得很幸運,今年最後一年就退了,還能去一次區域賽,感受一下比 賽的...

2016 青島區域賽小結

轉眼大三,又是一場區域賽打下來,本來也沒什麼追求,想拿個銀牌就此光榮退役。但時不與我,又是乙個擦肩而過,心裡還是莫名有些悲傷,都已經是大三狗的我,該何去何從又是乙個值得思量的問題。轉瞬一年時光,猶記得在南陽ccpc賽場上吊車尾的模樣,自那之後好像打擊頗大,也是那場比賽之後才算是正式入了acm這個坑。...

2018 ACM ICPC 青島站現場賽總結

埋怨運氣是沒有用的 不夠努力才是原罪 選擇了這條路後的第二次寫總結 也是第二次比較大型的賽事叭 寫之前回顧了一下第一次的總結,慶幸自己在這半年內有所長進。博弈已經有了一些水題的積累,kmp 組合數學也見識了一些題目並補充了一些拓展演算法。莫比烏斯反演 杜教篩等一些數學方面的知識也得到了補充和加強,數...