牛客 動物森友會 二分 最大流

2021-10-05 05:23:47 字數 1329 閱讀 1451

題目大意:給出 n 個任務,每個任務只能在每週固定的星期完成,需要完成 c 次,現在每天可以完成 m 次,問最少需要幾天才能將所有任務完成

題目分析:上當了。。讀完題後感覺是網路流,還有點熟悉的感覺,去翻了翻部落格找到了之前愛麗絲拍電影的那個題目,然後就被誤導了,愛麗絲拍電影的那個題目是因為每個電影還有乙個限制條件,所以需要將日期拆點,而這個題目正好沒有那個限制條件,所以可以將日期合併為星期,二分答案直接判定就行了,刷題刷多了好像也不是一件好事。。

超級源點 -> 每個任務,權值為需要完成的次數 c 

每個任務 -> 對應的星期,權值為無窮大

每個星期 -> 超級匯點,權值為 mid / 7 + ( mid%7 >= i )

需要注意的是邊界問題,因為資料範圍很容易爆 int ,所以一種方法是直接將網路流模板中的 int 全部改為 long long ,另一種方法就是可以稍微計算一下,發現只需要將二分的上界的無窮大除以 m 就可以了

**:

#include#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;

typedef long long ll;

typedef unsigned long long ull;

const int inf=0x3f3f3f3f;

const int n=1e3+100;

struct edge

edge[n*n];//邊數

int head[n],cnt;

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

int d[n],now[n];//深度 當前弧優化

bool bfs(int s,int t)//尋找增廣路

} return false;}

int dinic(int x,int t,int flow)//更新答案

} now[x]=i;

return flow-rest;}

void init()

int solve(int st,int ed)

struct node

a[n];

int n,m,sum;

bool check(int mid)

int main()

} int l=0,r=inf/m,ans;

while(l<=r)

else

l=mid+1;

} printf("%d\n",ans);

return 0;

}

動物森友會 科大訊飛杯L題 二分答案 最大流

有n個物品,一周有7天,然後呢,要對應的每個物品都要達到各自的需求數量 很明顯的,這是線性關係的,我們可以用二分答案來解決這個問題,然後呢怎麼知道是否滿足條件也就是 記得開long long。include include include include include include includ...

牛客 求交集(二分)

給你兩個公升序排列的集合,求出兩個集合的交集。有多個測試用例,輸入到檔案結束。對於每乙個測試用例 第一行輸入兩個整數n,m 0示例1 2 31 31 2 3 1 3 交集為空的情況下,輸出 empty 題意 思路 一開始沒想到用二分,先想的是map對映一下,時間很短,但是記憶體超了qaq,感覺這個題...

poj 2112 最大流 二分

題意 有k臺擠奶機,c頭奶牛,給出這k c個實體間的距離,求出每頭奶牛都到一台擠奶機去,怎麼分配使奶牛走的最大距離最小。用二分列舉最大距離,include include define n 500 define inf 0x3fffffff int map n n dis n gap n head ...