当前位置:网站首页>luoguP2756 飞行员配对方案问题(最大流)
luoguP2756 飞行员配对方案问题(最大流)
2022-06-30 05:44:00 【Coco_T_】
很典型的二分图匹配问题
外籍飞行员作为X部,英国飞行员作为Y部
源点向X部连边,容量为1
Y部向汇点连边,容量为1
X部与Y部之间连边,容量为1
狂WA不止原来是因为方案输出
我这里用了一个数组记录(外籍飞行员,英国飞行员)边的编号
数组默认值为0
dinic之后判断边的容量是否为0
注意需要判断数组中记录的编号是否有效(是否为默认值)
Tip
注意bfs和dfs的时候,需要判断当前边是否还有容量
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<queue>
using namespace std;
const int INF=0x33333333;
const int N=105;
int mp[N][N];
int st[N],tot=-1;
struct node{
int x,y,v,nxt;
};
node way[N*N];
int n,m,s,t;
void addway(int u,int w,int z) {
tot++;
way[tot].x=u;
way[tot].y=w;
way[tot].v=z;
way[tot].nxt=st[u];
st[u]=tot;
}
queue<int> q;
int cur[N];
int deep[N];
int bfs() {
memset(deep,-1,sizeof(deep));
for (int i=0;i<=n+1;++i) cur[i]=st[i];
q.push(s);
deep[s]=1;
while (!q.empty()) {
int r=q.front();
q.pop();
for (int i=st[r];i!=-1;i=way[i].nxt) {
int y=way[i].y;
if (way[i].v && deep[y]==-1) {
//way[i].v!=0
q.push(y);
deep[y]=deep[r]+1;
}
}
}
return deep[t]!=-1;
}
int dfs(int now,int t,int limit) {
if (now==t || !limit) return limit;
int f,flow=0;
for (int i=cur[now];i!=-1;i=way[i].nxt) {
cur[now]=i;
if (way[i].v && deep[way[i].y]==deep[now]+1 && (f=dfs(way[i].y,t,min(limit,way[i].v)))) {
way[i].v-=f;
way[i^1].v+=f;
limit-=f;
flow+=f;
if (!limit) break;
}
}
return flow;
}
int dinic() {
int ans=0;
while (bfs()) {
ans+=dfs(s,t,INF);
}
return ans;
}
int main()
{
memset(st,-1,sizeof(st));
scanf("%d%d",&m,&n);
s=0;
t=n+1;
for (int i=1;i<=n;i++) {
if (i<=m) {
addway(s,i,1);
addway(i,s,0);
}
else {
addway(i,t,1);
addway(t,i,0);
}
}
int x,y;
scanf("%d%d",&x,&y);
while (x!=-1 && y!=-1) {
addway(x,y,1);
mp[x][y]=tot;
addway(y,x,0);
scanf("%d%d",&x,&y);
}
printf("%d\n",dinic());
for (int i=1;i<=m;++i) {
for (int j=m+1;j<=n;++j) {
if (mp[i][j] && way[mp[i][j]].v == 0) {
printf("%d %d\n",i,j);
}
}
}
return 0;
}
边栏推荐
- 9. naive Bayes
- Vfpbs uploads excel and saves MSSQL to the database
- 旋转框目标检测mmrotate v0.3.1入门
- I have been working as a software testing engineer for 5 years, but I was replaced by an intern. How can I improve myself?
- After getting these performance test decomposition operations, your test path will be more smooth
- Projet Web de déploiement du serveur Cloud
- How to write a thesis
- Uboot reads the DDR memory size by sending 'R' characters through the terminal
- Array pointers and pointer arrays
- Xi'an Jiaotong 21st autumn online expansion resources of online trade and marketing (III) [standard answer]
猜你喜欢
VFPBS上传EXCEL并保存MSSQL到数据库中
MySQL advanced (Advanced SQL statement)
token 过期后,如何自动续期?
[typescript] cannot redeclare block range variables
Access is denied encountered when vfpbs calls excel under IIS
Transfer the token on the matic-erc20 network to the matic polygon
Codeforces C. Andrew and Stones
动态规划--怪盗基德的滑翔翼
剑指 Offer 18. 删除链表的节点
Solidity - Security - reentrancy attack
随机推荐
Codeforces B. MEX and Array
09- [istio] istio service entry
How to judge the quality of network transformer? What symptom is network filter transformer broken?
About modifying dual system default startup item settings
Super comprehensive summary | related improvement codes of orb-slam2 / orb-slam3!
1380. lucky numbers in matrices
Solidity - 安全 - 重入攻击(Reentrancy)
Responsive flow layout
Switch to software testing and report to the training class for 3 months. It's a high paying job. Is it reliable?
3D rotation album
Visualization of 3D geological model based on borehole data by map flapping software
At the beginning of 2022, people who are ready to change jobs should pay attention to
The average salary of software testing in 2022 has been released. Have you been averaged?
Introduction to mmcv common APIs
E: Topic focus
Did you know that WPS can turn on eye protection mode?
[Blue Bridge Road -- bug free code] analysis of AT24C02 storage code
如何写论文
Array pointers and pointer arrays
MySQL advanced (Advanced SQL statement)