第一次做二分图匹配的题~这个题也就是说求最小点覆盖,也就是找最大的二分图匹配~
代码:
#include<cstdio> #include<cstring> #include<iostream> #include<vector> using namespace std; const int maxn=1001; vector<int> e[maxn]; int n,m,k; int mk[101]; bool vis[101]; bool DFS(int u) { for(int i=0;i<e[u].size();i++) { int v=e[u][i]; if(!vis[v]) { vis[v]=1; if(mk[v]==-1||DFS(mk[v])) { mk[v]=u; return 1; } } } return 0; } int main() { while(scanf("%d",&n)&&n) { scanf("%d%d",&m,&k); for(int i=0;i<=n;i++) e[i].clear(); for(int i=0;i<k;i++) { int ita,itb,itc; scanf("%d%d%d",&ita,&itb,&itc); if(itb*itc==0) continue; e[itb].push_back(itc); } memset(mk,-1,sizeof(mk)); int ans=0; for(int i=1;i<=n;i++) { memset(vis,0,sizeof(vis)); if(DFS(i)) ans++; } printf("%d\n",ans); } return 0; }