link
其實網路流就是再考你如何去建邊。
先見$s$,$t$為源點與匯點,然後將$s$連向每乙個單位,流量為每個單位的人數,然後將每乙個單位連向每乙個餐桌,流量為$1$,最後在將每乙個餐桌與$t$相連,流量為每個餐桌容量,然後跑一邊$dinic$最大流就行,只需要優化一點點,每次$dfs$增廣多條增廣路就行,第一問就做完了($0$還是$1$)。第二問要去求到底在那一桌,我們可以去掃瞄當前的圖,然後若$a$,$b$相連,且$a$為單位,$b$為餐桌,並且當前流量等於$0$,則必$a$集團的人道$b$桌吃飯,然後就輸出就行。
#include#includeview code#include
#include
#include
#include
using
namespace
std;
inline
intread()
while(c>='
0'&&c<='9')
return f*ans;
}queue
que;
const
int maxn=50001
;const
int inf=int_max;
struct
nodex[maxn
<<1
];struct
nodepre[maxn
<<1
];int
m,n,s,t,cnt,head[maxn],num[maxn],lim[maxn],deep[maxn];
void add(int u,int v,int
w)bool
bfs()}}
return deep[t]!=inf;
}int
st,lowflow,ans,vis;
inline
int dfs(int xx,int
flow)
int used=0
;
for(int i=head[xx];i!=-1;i=x[i].nex)}}
return
used;
}inline
intdinic()
}return
ans;
}int
main()
for(int i=1;i<=n;i++)
int st=dinic();
if(st!=st)
printf(
"%d\n
",1);
for(int i=1;i<=m;i++)
}printf("\n
");}
}
LibreOJ 6004 圓桌聚餐 最大流
題解 天啊,這道最大流真是水的一批 只需要每張桌子向每個單位建一條容量為1的邊,源點向桌子建邊,容量為桌子能坐的人數 單位向匯點建邊,容量為單位人數即可,然後根據單位與桌子的連邊值是否為一來了解每個單位配對的桌子即可 如下 include include include include includ...
loj6004 網路流 24 題 圓桌聚餐
題目描述 假設有來自 n n n 個不同單位的代表參加一次國際會議。每個單位的代表數分別為 ri r i r i 會議餐廳共有 m m m 張餐桌,每張餐桌可容納 ci c i c i 個代表就餐。為了使代表們充分交流,希望從同乙個單位來的代表不在同乙個餐桌就餐。試設計乙個演算法,給出滿足要求的代表...
LOJ 6004 網路流 24 題 圓桌聚餐
題意 假設有來自 m mm 個不同單位的代表參加一次國際會議。每個單位的代表數分別為 r ir i ri 會議餐廳共有 n nn 張餐桌,每張餐桌可容納 c ic i ci 個代表就餐。為了使代表們充分交流,希望從同乙個單位來的代表不在同乙個餐桌就餐。試設計乙個演算法,給出滿足要求的代表就餐方案。連...