1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| #include<cstdio> #include<cstring> #include<algorithm> #define ll int #define N 1005 using namespace std; struct edge{ ll to,next; }e[N*2]; ll head[N],flag[N],link[N],n,m,ans,tot; void add(ll u,ll v){ e[++tot]=(edge){v,head[u]}; head[u]=tot; } bool find(ll u){ for (ll i=head[u],v=e[i].to;i;i=e[i].next,v=e[i].to) if (!flag[v]){ flag[v]=1; if (!link[v]||find(link[v])){ link[v]=u; return 1; } } return 0; } int main(){ scanf("%d%d",&n,&m); for (ll i=1;i<=m;i++){ ll u,v; scanf("%d%d",&u,&v); add(i,u); add(i,v); } for (ll i=1;i<=n;i++){ memset(flag,0,sizeof flag); if (find(i)) ans++; else break; } printf("%d",ans); }
|