P2756 飞行员配对方案问题

解析

可以说是非常简单的二分图模板,如果不会二分图可以去看me的二分图详解+题目

#include <bits/stdc++.h>
using namespace std;
int match[105];
int n,m;
int u,v;
int head[205],vis[205];
struct node{
	int next,to;
}e[20005];
int cnt=0;
void add(int x,int y){
	e[++cnt].to=y;
	e[cnt].next=head[x];
	head[x]=cnt;
}


bool dfs(int x){
	for (int i=head[x];i;i=e[i].next){
		int v=e[i].to;
		if (!vis[v]){
			vis[v]=1;
			if (!match[v]||dfs(match[v])){
				match[v]=x;
				return 1;
			}
		}
	}
	return 0;
}

int ans=0;
int main(){
	scanf("%d%d",&m,&n);
	do{
		scanf("%d%d",&u,&v);
		add(u,v);add(v,u);
	}while(u!=-1&&v!=-1);
	for (int i=1;i<=m;i++){
		memset(vis,0,sizeof(vis));
		if (dfs(i)) ans++;
	}
	printf("%d\n",ans);
	for (int i=m+1;i<=n;i++){
		if (match[i]!=0)
			printf("%d %d\n",match[i],i);
	}
}

P2756 飞行员配对方案问题

上一篇:衡中·记


下一篇:selenium-handle和iframe操作