大江东去,浪淘尽,千古风流人物。故垒西边,人道是,三国周郎赤壁。乱石穿空,惊涛拍岸,卷起千堆雪。江山如画,一时多少豪杰。遥想公瑾当年,小乔初嫁了,雄姿英发。羽扇纶巾,谈笑间,樯橹灰飞烟灭。故国神游,多情应笑我,早生华发。人生如梦,一尊还酹江月。

匈牙利算法模板(洛谷3386)

#include<bits/stdc++.h>
using namespace std;

#define go(i,a,b) for(int i=a;i<=b;++i)
#define com(i,a,b) for(int i=a;i>=b;--i)
#define mem(a,b) memset(a,b,sizeof(a))

const int inf=0x3f3f3f3f,N=1000+10;

int n1,n2,m,vis[2*N],head[N<<1],match[N<<1],cnt=0;
struct edge{
	int nxt,v;
}e[N*N*2];

void add(int u,int v){
	e[cnt]=(edge){head[u],v};
	head[u]=cnt++;
}

bool dfs(int u){
	for(int i=head[u];i+1;i=e[i].nxt){
		int v=e[i].v;
		if(vis[v]) continue;
		vis[v]=1;//必须在此处标记,因为只会标记二分图的一侧 
		if(!match[v]||dfs(match[v])){
			match[v]=u;
			return 1;
		}
	}
	return 0;
}

int main(){
	//freopen("input.txt","r",stdin);
	mem(head,-1);
	read(n1),read(n2),read(m);
	int x,y,w,ans=0;
	go(i,1,m){
		read(x),read(y);
		if(x>n1||y>n2) continue;
		add(x,y+n1);
	}
	go(i,1,n1){
		mem(vis,0);
		ans+=dfs(i);
	}
	cout<<ans;
	return 0;
}
posted @   White_star  阅读(200)  评论(0编辑  收藏  举报
编辑推荐:
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
阅读排行:
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
}
点击右上角即可分享
微信分享提示