bzoj 1287 Cards交換卡片(網路流)

2021-08-14 08:30:54 字數 828 閱讀 2519

傳送門biu~

把每種卡片建乙個節點,每位除了小c以外的小朋友建乙個節點。如果小c有一種卡片的張數大於1,則連一條從源點到此種卡片的弧,流量為張數減一;如果小c有一種卡片的張數為0,則連一條此種卡片到匯點的弧,流量為1。同理,如果乙個小朋友有一種卡片的張數大於1,則連一條這個小朋友到此種卡片的弧,流量為張數減一;如果乙個小朋友有一種卡片的張數為0,則連一條此種卡片到這個小朋友的弧,流量為1。顯然跑一邊網路最大流所得的答案即為小c多獲得的卡片的種類數,加上小c已有的種類數即為所求答案。

#include

using

namespace

std;

const

int inf=1e9;

int n,m,ans,s,t;

int card[205][205];

int fir[505],head[505],dep[505],nex[500005],to[500005],cap[500005],tp=1;

inline

void add(int x,int y,int c)

inline

int bfs()}}

return dep[t];

}int dfs(int x,int now)

}return c;

}inline

int dinic()

return c;

}int main()

else}}

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

printf("%d",ans+dinic());

return

0;}

BZOJ 2668 交換棋子

bzoj 2668 傳送門 重點在於對於每條轉移路徑 首尾算一次,中間節點算兩次 可以一點拆三點,將原流量拆成入流量和出流量 但其實也可以就拆兩點,分前後是否是一首尾點一普通點來確定是否有一條路徑只占用1流量 include using namespace std define x first de...

bzoj1826 貪心 快取交換

description 在計算機中,cpu只能和快取記憶體cache直接交換資料。當所需的記憶體單元不在cache中時,則需要從主存裡把資料調入cache。此時,如果cache容量已滿,則必須先從中刪除乙個。例如,當前cache容量為3,且已經有編號為10和20的主存單元。此時,cpu訪問編號為10...

bzoj3900 交換茸角

dp i 表示讓狀態為i的鹿滿足要求的最少交換次數 不能列舉兩頭鹿交換,因為一頭鹿可能交換多次後轉移到下乙個狀態 那就列舉子集 dp i min 初始化 將i這個狀態上的麋鹿的角從小到大排序後,若相鄰的i和i 1滿足 h i 1 h i c,則dp i 鹿的個數 1,否則dp i inf 因為若有t...