程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 二分匹配模版

二分匹配模版

編輯:C++入門知識

int lef[N*N];//lef[v]表示右邊點v 當前連接的點
bool T[N*N];//右邊的點是否連過
vector<int>G[N];//G是映射,G[X集].push_back(Y集)  注意G的初始化

bool match(int x)
{
	for(int i=0;i<G[x].size();i++)
	{
		int v=G[x][i];
		if(!T[v])
		{
			T[v]=true;
			if(lef[v]==-1||match(lef[v]))
			{
				lef[v]=x;
				return true;
			}
		}
	}
	return false;
}

void solve()
{
	int ans=0;
	memset(lef,-1,sizeof(lef));
	for(int i=0;i<pn-1;i++)//左右點集匹配,左點集是 0-(pn-1) 右點集是G[左點].size()
	{
		memset(T,0,sizeof(T));

		if(match(i))ans++;
	}
	printf("%d\n",ans);
}

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved