#include <iostream> #include <cstdio> #include <cstring>using namespace Std;const int N=1111;int n1,n2 , K;int mp[n][n],vis[n],link[n];int vis2[n];int v[n];int dfs (int x) {int i; Vis2[x]=1; for (I=1; i<=n2; i++) {if (!mp[x][i]&&!vis[i]) {vis[i]=1; if (link[i]==-1| | DFS (Link[i])) {link[i]=x; return 1; }}} return 0;} int main () {int i,x,y,s; int cas = 0; while (scanf ("%d%d%d", &n1,&n2,&k) &&n1) {s=0; for (int i=1;i<=n1;i++) {for (int j=1;j<=n2;j++) {mp[i][j]=1; }} for (i=0; i<k; i++) {scanf ("%d%d", &x,&y); mp[x][y]=0; } memset (link,-1,sizeof (link)); for (I=1; i<=n1; i++) {memset (vis,0,sizeof (VIS)); if (Dfs (i)) s++; } memset (Vis,0,sizeof (VIS)); memset (vis2,0,sizeof (VIS2)); memset (v,0,sizeof (v)); for (int i=1;i<=n2;i++) {v[link[i]]=1; printf ("link[%d]:%d\n", I,link[i]); } for (int i=1;i<=n1;i++) {if (!v[i]) DFS (i); } printf ("%d", s); Left overlay point for (int i=1;i<=n1;i++) {if (!vis2[i]) printf ("r%d", I); }//Right overlay point for (int i=1;i<=n2;i++) {if (Vis[i]) printf ("c%d", I); } puts (""); } return 0;}
Copyright notice: All brothers, please feel free to reprint, please indicate who is the brother
Minimum coverage point Set template