傳送門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...