暑期ACM集訓 網路流

2022-09-23 00:21:10 字數 2010 閱讀 7062

[problem]

網路流模板

#include

#include

#include

#include

#include

#include

#include

using namespace std;

#define inf 10000000

const int maxn = 1000;

struct edge;

vector g[maxn];

int level[maxn];

int iter[maxn];

int n, m, case = 0;

void add_edge(int from, int to, int cap) );

g[to].push_back((edge));

}void bfs(int s) }}

}int dfs(int v, int t, int f) }}

return 0;

}int max_flow(int s, int t)

}int main()

int ans = max_flow(1, n);

printf("case %d: %d\n", ++case, ans);

}return 0;

}[problem]

給定n(200)個任務,m個機器,每個任務s[i], t[i], p[i]分別代表最早開始時間,最晚結束時間, 以及需要執行的時間,判斷m個機器是否可以完成所有任務。

每個任務可以由不同機器間斷性完成

[solution]

每個任務可以由不同機器間斷性完成,所以我們判斷該任務在s[i]-t[i]時間內是否承擔了p[i]的時間。

每一天抽象為乙個點。

每個任務與源點連邊,容量為p[i],每個任務與s[i]-t[i]的時間點連邊,容量為1, 每個時間點與終點連邊,容量為m,最後判斷最大流與∑p[i]的關係即可

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

for(int i = 1; i <= days; i++) add_edge(i, aim, m);

int ans = max_flow(0, aim);[problem]

給定n個女孩和n個男孩的相斥關係,每輪遊戲每個女孩選擇以前沒有選過的乙個男孩完成遊戲,詢問遊戲最多可以玩多少輪。

[solution]

二分 + 網路流

二分遊戲進行輪數,問題便成了判斷遊戲是否可以進行mid輪。

原點與每個女孩連邊,容量為mid,終點與男孩連邊,容量為mid,不相斥的男孩與女孩連邊,容量為1,最後判斷最大流是否為mid * n

bool cal(int mid)

int tot = max_flow(0, aim);

return tot == mid * n;

}[problem]

在上一題的基礎上,為了讓遊戲進行更多輪,每個女孩可以選取任意的k個男孩作為自己的companion,詢問最大輪數

[solution]

在上一道題的基礎上,每個女孩連線新的節點x,容量為k,x與所有與女孩相斥的男孩相連,容量為1

bool cal(int mid)

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

int tot = max_flow(0, aim);

return tot == mid * n;

}[problem]

給定矩陣,矩陣元素為1代表是羊,2代表狼,0代表空,在一些位置的邊建上fence,使得狼無法到達羊的位置,詢問最小fence

[solution]

原點與羊連邊,容量為inf, 終點與狼連邊,容量為inf,每個位置與其可以到達的四個位置連邊,容量為1,最後跑一邊最小割

for(int i = 0; i <= aim; i++) g[i].clear();

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

int ans = max_flow(0, aim);

ACM暑期集訓2

今天主要學習了線性dp和揹包問題以及快速冪。1.整數快速冪 這個直接粘上 int qpow int x,int n res res res n n 1 return ans 2.矩陣快速冪 主要就是將整數快速冪的乘法運算換做矩陣的乘法 下面的 是方陣的快速冪 const int n 10 int t...

ACM暑期集訓4

今天主要學習了線段樹,樹狀陣列,st表,差分,分塊和樹剖 好吧,這個已經沒聽懂了 1.線段樹 線段樹涉及許多應用和思想,以下是今天所學 線段樹主要用於處理一段連續區間的插入,查詢,統計,查詢等操作。複雜度 設區間長度是n,所有操作的複雜度是logn級別。性質 線段樹是平衡的2叉樹,最大深度logn ...

ACM暑期集訓5

今天主要學習力圖論基礎和最短路徑 1.圖論基礎 1 鄰接矩陣存圖 w i j 表示以ij為頂點的邊的權值 const int n 105,inf 9999999 int dis n w n n vis n n,m 鄰接矩陣存圖 for int i 1 i n i for int i 0 i2 鄰接表...