题目链接
https://vjudge.net/problem/POJ-1274
解题思路
不愧是最FW的OJ,屁OJ,用链式前向星RUNTIME ERROR,用vector过了。
匈牙利算法板子题。
思想的话,懒得讲了……
AC代码
#include<iostream> #include<cstdio> #include<cstring> #include<vector> #define ll long long using namespace std; const int N=250; int n,m,v,ans,num,link[N]; bool vis[N]; vector<int> e[N]; bool dfs(int x) { for(int i=0;i<e[x].size();i++) { int v=e[x][i]; if(vis[v]) continue; vis[v]=1; if(link[v]==0 || dfs(link[v])) { link[v]=x; return 1; } } return 0; } int main() { while(~scanf("%d%d",&n,&m)) { ans=0; memset(link,0,sizeof link); for(int i=1;i<=n;i++) e[i].clear(); for(int i=1;i<=n;i++) { cin>>num; while(num--) cin>>v,e[i].push_back(v); } for(int i=1;i<=n;i++) { memset(vis,0,sizeof vis); if(dfs(i)) ans++; } cout<<ans<<endl; } }
另附二分图匹配板子
https://blog.nowcoder.net/n/32ac7aa3853b4ee1b9264b821473bd6b