hdu1281+坐标构图+二分匹配

hdu1281+坐标构图+二分匹配

这道题主要就是构图思想 之前的hdu1045题也是一样的 但是没想明白为什么这样构图是正确的
虽然说现在也没真正想清楚 但是也能够进一步理解
解题思路是 以x 和 y轴建立二分图 x和y分别代表两个集合 如果一个点可以放车 那么x,y连一条边
因为是 坐标的垂直方向和水平方向不能有车 所以这个坐标x,y连一条边,这样就可以排除车相互攻击的可能性 代表可以放东西
这是一个新思想 可以好好的斟酌

#pragma comment(linker, "/STACK:1024000000,1024000000")
#include 
#include
#include
#include
#include
#include
#define inf 0x3f3f3f3f
using namespace std;
const int Maxn=305;
const int Maxm=1000005;
int head[Maxn],tot,linker[Maxn],colour[Maxn],k,m,n,u,v;;
bool used[Maxn],g[Maxn][Maxn];
bool dfs2(int u)
{
	for(int i=1;i<=n;i++)
		if(g[u][i] && !used[i])
		{
			used[i]=true;
			if(linker[i]==-1 || dfs2(linker[i]))
			{
				linker[i]=u;
				return true;
			}
		}
	return false;
}
int pipei()
{
	int ans=0;
	memset(linker,-1,sizeof(linker));
	for(int i=1;i<=n;i++)
	{
		memset(used,0,sizeof(used));
		if(dfs2(i))//因为是每个点都遍历 所以不用考虑图的联通性 
			ans++;
	}
	return ans;
} 
int main()
{
	int ca=0;
	while(scanf("%d%d%d",&n,&m,&k)!=EOF)
	{
		memset(g,0,sizeof(g));
        for(int i=0;i


你可能感兴趣的:(连通图)