题目:https://www.luogu.org/problemnew/show/P3386
注意代码中标记处。
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int n,m,e,x,y,xnt,head[1005],pre[1005],ans; bool vis[1005],in[1005]; struct Node{ int next,to; }edge[1000005]; void add(int x,int y) { edge[++xnt].next=head[x]; edge[xnt].to=y; head[x]=xnt; } bool dfs(int a) { for(int i=head[a],v;i;i=edge[i].next) { if(vis[v=edge[i].to])continue; vis[v]=1;///// if(!pre[v]||dfs(pre[v])) { pre[v]=a; return true; } } return false; } int main() { scanf("%d%d%d",&n,&m,&e); for(int i=1;i<=e;i++) { scanf("%d%d",&x,&y); if(x>n||y>m)continue; add(x,y); } for(int i=1;i<=n;i++) { memset(vis,0,sizeof vis); if(!in[i]) if(dfs(i))in[i]=1,ans++; } printf("%d",ans); return 0; }