`

【二分图+有难度】杭电 hdu 1281 棋盘游戏

阅读更多

 

/* THE PROGRAM IS MADE BY PYY */
/*----------------------------------------------------------------------------//
    Copyright (c) 2011 panyanyany All rights reserved.

    URL   : http://acm.hdu.edu.cn/showproblem.php?pid=1281
    Name  : 1281 棋盘游戏

    Date  : Tuesday, November 8, 2011
    Time Stage : an hour

    Result: 
4930281	2011-11-08 20:57:47	Accepted	1281
31MS	248K	1675 B
C++	pyy


Test Data :

Review :
一开始想不明白,怎么样才能求那些“重要点”,甚至还想到从反面下手,先求
“不重要点”。但还是不得其解,于是看了人家的解题报告,发现可以试着删除
某个点,如果删除后最大的“车”数量有所减少,则证明它是“重要点”。
//----------------------------------------------------------------------------*/

#include <stdio.h>
#include <vector>

using std::vector ;

#define MAXSIZE 109

int		n, m, k ;
int		link[MAXSIZE], cover[MAXSIZE] ;
bool	map[MAXSIZE][MAXSIZE] ;

int find (int cur)
{
	int i, j ;
	for (i = 1 ; i <= m ; ++i)
	{
		if (cover[i] == false && map[cur][i] == true)
		{
			cover[i] = true ;
			if (link[i] == 0 || find (link[i]))
			{
				link[i] = cur ;
				return 1 ;
			}
		}
	}
	return 0 ;
}

int getSum ()
{
	int i ;
	int sum ;
	sum = 0 ;
	memset (link, 0, sizeof (link)) ;
	for (i = 1 ; i <= n ; ++i)
	{
		memset (cover, 0, sizeof (cover)) ;
		sum += find (i) ;
	}
	return sum ;
}

int main ()
{
	int i, j ;
	int x, y ;
	int sum, tmpSum, important, tcase ;
	tcase = 0 ;
	while (~scanf ("%d%d%d", &n, &m, &k))
	{
		memset (map, false, sizeof (map)) ;
		for (i = 0 ; i < k ; ++i)
		{
			scanf ("%d%d", &x, &y) ;
			map[x][y] = true ;
		}

		sum = getSum () ;

		// 枚举所有可落“车”的点,分别删除,若车的最大数减少,则证明
		// 该点为 “重要点”
		important = 0 ;
		for (i = 1 ; i <= n ; ++i)
		{
			for (j = 1 ; j <= m ; ++j)
			{
				if (map[i][j])
				{
					map[i][j] = false ;
					tmpSum = getSum () ;
					map[i][j] = true ;

					if (tmpSum < sum)
						++important ;
				}
			}
		}
		printf ("Board %d have %d important blanks for %d chessmen.\n", ++tcase,
			important, sum) ;
	}
	return 0 ;
}
 
0
1
分享到:
评论

相关推荐

    杭电HDU ACM培训课件

    《杭电HDU ACM培训课件》是一份珍贵的学习资源,源自杭州电子科技大学的ACM竞赛培训课程。这些课件是官方论坛上分享的,旨在为那些积分不足无法获取资源或者对ACM编程竞赛感兴趣的初学者提供帮助。下面将详细阐述这...

    杭电HDU2050题的ac程序

    一个十分简单的程序,能够ac杭电hdu的第2050题,无注释,简单明了

    计算机网络复习大纲_杭电hdu.pdf

    计算机网络复习大纲_杭电hdu.pdf

    计算机网络复习大纲_杭电hdu整理.pdf

    计算机网络复习大纲_杭电hdu整理.pdf

    计算机网络复习大纲_杭电hdu参考.pdf

    计算机网络复习大纲_杭电hdu参考.pdf

    杭电HDU ACM 1005

    杭电ACM1005题源代码,AC了的程序,无问题……

    杭电操作系统实验 HDU操作系统实验.zip

    杭电操作系统实验 HDU操作系统实验.zip杭电操作系统实验 HDU操作系统实验.zip杭电操作系统实验 HDU操作系统实验.zip杭电操作系统实验 HDU操作系统实验.zip杭电操作系统实验 HDU操作系统实验.zip杭电操作系统实验 HDU...

    杭电ACMhdu1163

    【标题】:杭电ACMhdu1163 【描述】:这是一道源自杭州电子科技大学(Hangzhou Dianzi University,简称HDU)的ACM编程竞赛题目,编号为1163。这类问题通常需要参赛者利用计算机编程解决数学、逻辑或算法上的挑战,...

    hdu_ACM.rar_ACM_hdu_hdu acm_hdu_ACM_杭电ACM

    杭电hdu acm资料所用杭电的acm题

    计算机网络复习大纲_杭电hdu借鉴.pdf

    每一层都有其特定的任务,例如物理层负责数据的物理传输,数据链路层处理相邻节点间的通信,网络层处理网络间的路由选择,运输层确保数据的可靠传输,而应用层则是用户直接交互的接口。 带宽是衡量网络传输能力的...

    HDU杭电 计算机网络实验报告

    这份"HDU杭电 计算机网络实验报告"压缩包提供了丰富的实验材料,涵盖了多个关键的网络技术,包括交换机配置、路由协议、地址转换(NAT)、访问控制列表(ACL)以及动态主机配置协议(DHCP)等。以下是这些实验报告所...

    HDU刷题地图+精选详细笔记

    本人准备2020年保研机试时刷的题目(虽然最后机试取消了,...来自某中流985,在HDU和vjudge平台上大概刷了400道。本文件地图(excel表格)包含了绝大部分我刷过的题目,笔记中具有思路、代码、总结和心得。 大佬勿入!

    杭电(HDU)ACM题解

    HDU2000至2099题的题目以及AC代码(含思路) 适合刚刚接触ACM的同学哦~ emmmm凑字

    HDU 杭电操作系统实验 (通过验收)

    包含实验内容:对应实验要求上的1/2/3/5实验,分别为setName/setNice,petree输出进程,模拟shell,进程通信,文件系统。包含全部实验源代码和详尽的word实验报告。同时包含在线PTA编程题目:进程模拟,模拟进程调度...

    acm课件搜索(杭电)(HDU)

    总的来说,"acm课件搜索(杭电)(HDU)"这一主题为ACM学习者提供了一个宝贵的资料库,特别是对搜索算法的探讨,有助于参赛者提升在竞赛中的表现。通过深入学习和实践,学生能够熟练掌握DFS和BFS,以及其他相关算法...

    acm课件简单数学题(杭电)(HDU)

    在ACM(国际大学生程序设计竞赛,International Collegiate Programming Contest,简称ICPC)中,数学是至关重要的一部分,尤其是在解决杭电(Hangzhou Dianzi University,简称HDU)的题目时。本课件"acm课件简单...

    ACM HDU 2000-2099 解题报告 杭电 ACM

    《ACM HDU 2000-2099 解题报告 杭电 ACM》是一份详尽的编程竞赛解题集,主要涵盖了杭电(Hangzhou Dianzi University)在线判题系统(HDU OJ)上的2000至2099号题目。这份解题报告是针对参与ACM/ICPC(国际大学生...

Global site tag (gtag.js) - Google Analytics