(最大流,二分圖的多重匹配) Magic Potion
題意:n個人,m個怪物,k瓶藥水,每個人可以打死對應的集合裡面的一個怪物,一碰藥水可以讓一個人多打死一個怪物,每個人最多隻能用一瓶藥水,問最多能打死多少個怪物
思路:想到了匹配,然後用最大流做,一開始想的建圖是從超級原點連一條容量是n+k的邊到虛擬節點,然後虛擬節點與所有勇士連一條容量是2的邊,然後勇士與對應的怪物連1的邊,怪物與匯點連1的邊跑最大流,然後wa了,錯誤在於我們這樣做預設勇士可以用藥了,然後k等於0的時候,答案就不對了,所以正解是超級源點和所有勇士連1的邊,藥水節點與勇士連1的邊,超級源點與藥水連k的邊,勇士和對應怪物連1的邊,怪物與匯點連1的邊,跑最大流
ac程式碼:
#include<iostream>
#include<cstring>
using namespace std;
const int N=10000,M=60010;
int h[N],ne[M],e[M],idx,f[M];
void add(int a,int b,int c)
{
e[idx]=b,ne[idx]=h[a],f[idx]=c,h[a]=idx++;
e[idx]=a,ne[idx]=h[b],f[idx]=0,h[b]=idx++;
}
const int INF=1e8;
int S0,S,T,n,m,k;
int d[N];
int cur[N];
int q[N];
int bfs()
{
int hh=0,tt=0;
memset(d,-1,sizeof d);
//cout<<S<<endl;
d[S]=0;
cur[S]=h[S];
q[0]=S;
while(hh<=tt)
{
int t=q[hh++];
for(int i=h[t];~i;i=ne[i])
{
int j=e[i];
if(f[i]&&d[j]==-1)
{
d[j]=d[t]+1;
cur[j]=h[j];
if(j==T) return true;
q[++tt]=j;
}
}
}
return false;
}
int dfs(int u,int limit)
{
//cout<<u<<endl;
if(u==T)
return limit;
int flow=0;
for(int i=cur[u];~i&&flow<limit;i=ne[i])
{
int j=e[i];
cur[u]=i;
if(d[j]==d[u]+1 && f[i])
{
int t=dfs(j,min(f[i],limit-flow));
if(!t)
d[j]=-1;
f[i]-=t;
flow+=t;
f[i^1]+=t;
}
}
return flow;
}
int dinic()
{
int res=0,flow;
while(bfs())
while(flow=dfs(S,INF))
res+=flow;
return res;
}
int main()
{
cin >> n >> m >> k;
//cout<<n<<' '<<m<<' '<<k<<endl;
memset(h,-1,sizeof h);
for(int i=1;i<=n;i++)
{
int t;
cin>>t;
while(t--)
{
int x;
cin>>x;
add(i,n+x,1);
}
}
for(int i=1;i<=n;i++)
add(n+m+1,i,1),add(0,i,1);
for(int i=n+1;i<=n+m;i++)
add(i,n+m+2,1);
add(0,n+m+1,k);
S=0;
T=n+m+2;
cout<<dinic()<<endl;
}
相關文章
- 二分圖匹配
- 二分圖最大權完美匹配
- POJ - 3041 Asteroids 【二分圖匹配】AST
- 二分圖最小點覆蓋等於二分圖最大匹配
- 匈牙利演算法--二分圖的最大匹配演算法
- 圖論-二分圖匹配匈牙利演算法圖論演算法
- 【UOJ78】二分圖最大匹配
- 二分圖最大匹配(匈牙利演算法)演算法
- BZOJ-1305 dance跳舞 建圖+最大流+二分判定
- 二分圖的最大匹配(匈牙利演算法)程式碼演算法
- 詳解匈牙利演算法與二分圖匹配演算法
- 《啊哈!演算法》我要做月老 ——二分圖最大匹配演算法
- (二分圖+最大流)洛谷P2774方格取數問題
- 對匈牙利演算法理解——對二分圖進行最大匹配的演算法演算法
- AtCoder Beginner Contest 192 F - Potion
- 影像匹配(大圖中找小圖)最簡單方法:aircv之find_templateAI
- 關於二分圖上的最大匹配、最小點覆蓋、最大獨立集以及最大權閉合子圖的聯絡
- Vector Magic for Mac/win,圖片向量化的神器!Mac
- bzoj3993: [SDOI2015]星際戰爭(二分+最大流)
- P8563 Magenta Potion 題解
- 圖的匹配與網路流
- POJ 3014:Asteroids(二分匹配,匈牙利演算法)AST演算法
- 好用的向量圖形轉換軟體:vector magic for MacMac
- 二分圖補充
- 二分圖(例題)
- 『筆記』二分圖筆記
- kebab HDU - 2883(思維建圖,最大流)
- Magic
- Mac圖片馬賽克工具—Magic Hider for MacMacIDE
- 拆點判定二分圖
- use-magic-grid:magic-grid 庫的官方 React 埠React
- 關押罪犯(二分答案+染色法判二分圖)
- 正規表示式匹配html中的圖片HTML
- 圖解--二分查詢樹圖解
- 二分法 字首和 最長子序列
- sift、surf、orb 特徵提取及最優特徵點匹配ORB特徵
- 匹配圖片連結地址的正規表示式
- [Python手撕]判斷二分圖Python