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<bitset> #include<vector>
using namespace std;
int k,n,m; bitset<505> vis;
int main(){ while(~scanf("%d",&k)){ if(!k)return 0; int ans=0; scanf("%d%d",&n,&m); vector<vector<int>> g(n+1); vector<int> f(m+1); for(int i=1,x,y;i<=k;++i)scanf("%d%d",&x,&y),g[x].push_back(y); auto ck=[&](auto self,int x)->bool{ for(auto it:g[x]){ if(!vis[it]){ vis[it]=1; if(!f[it]||self(self,f[it])){ f[it]=x; return true; } } } return false; }; for(int i=1;i<=n;++i){ vis.reset(); if(ck(ck,i))ans+=1; } printf("%d\n",ans); } }
|