解析
可以说是非常简单的二分图模板,如果不会二分图可以去看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);
}
}