P2071 座位安排(二分图)

Miku

既然是二分图匹配的模板

为什么不和模板一样是绿的

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct b{
	int to;
	int ne;
}e[16001];
int head[4001];
int p;
int n;
int x,y;
int match[4001];
int vis[4001];
int cnt;
void add(int f,int to){
	p++;
	e[p].to=to;
	e[p].ne=head[f];
	head[f]=p;
}
bool find(int now){
	for(int v=head[now];v;v=e[v].ne){
		int i=e[v].to;
			if(!vis[i]){
				vis[i]=1;
				if((match[i]==0)||find(match[i])){
					match[i]=now;
					return 1;
				}
			}
	}
	return 0;
}
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n*2;++i){
		scanf("%d%d",&x,&y);
		add(i,y*2);
		add(i,y*2-1);
		add(i,x*2);
		add(i,x*2-1);
	}
	for(int i=1;i<=n*2;++i){
		memset(vis,0,sizeof(vis));
		if(find(i))
		cnt++;
	}
	cout<<cnt;
	return 0;
}
posted @ 2020-08-07 22:42  Simex  阅读(148)  评论(0编辑  收藏  举报