[洛谷]P1894 [USACO4.2] 完美的牛栏The Perfect Stall (二分图最大匹配图)

思路:

几乎又是模板啦~(我晚上已经用这个模板A三道了哈哈哈,两蓝一绿,rp++加加加)

ACcode:

#include
using namespace std;
#define int long long
const int N=2e2+10,M=1e5+10;
int n,m,res,h[N],e[M],ne[M],idx,match[N];
bool vis[N];
void add(int a,int b) {
	e[++idx]=b,ne[idx]=h[a],h[a]=idx;
}
bool dfs(int u) {
	for(int i=h[u]; i!=-1; i=ne[i]) {
		int j=e[i];
		if(!vis[j]) {
			vis[j]=true;
			if(!match[j]||dfs(match[j])) {
				match[j]=u;
				return true;
			}
		}

	}
	return false;
}
void solve() {
	cin>>n>>m;
	memset(h,-1,sizeof h);
	for(int i=1; i<=n; i++) {
		int s;
		cin>>s;
		while(s--) {
			int x;
			cin>>x;
			add(i,x);
		}
	}
	for(int i=1; i<=n; i++) {
		memset(vis,false,sizeof vis);
		if(dfs(i))res++;
	}
	cout<>tt;
	while(tt--) solve();
	return 0;
}
//3

over~

你可能感兴趣的:(算法,c++,二分图,匈牙利算法,加油)