acm2063 很难的一题

本人目前为止 做过最难的一题 看了别人的代码半天才看懂 真正理解代码 用了一下午的时间。代码如下:

#include<stdio.h>
#include<string.h>

int k,n,m;
int p[500][500]={0};
int luckboy[500]//一种标志 一定其luckboy[i]=1 表示i已经有后女友了 前女友不能再选他 (不能说i有女友) luckboy就一定为1
// 因为 luckboy每帮一位女士找到男朋友后 全部附为0 他的作用只是在帮i前女友找新男友时确保不再找i为男友的一个标志
int bg[500]={0};//相爱的男女 可一直到哪个女的和哪个男的相爱 下标为男孩 元素指为女孩 因为要从男孩找其前女友 故用下标表示男孩 更好找到其前女友
int foundboy(int);

int main(void)
{
int sum=0;
scanf("%d%d%d",&k,&n,&m);
for(int i=0;i<k;i++)//a和b分别表示男女生可能的配对 元素值为1表示该元素的下表a b男女生可能在一起
{
int a,b;
scanf("%d%d",&a,&b);
p[a][b]=1;
}
for(int i=1;i<=n;i++)
{
memset(luckboy,0,sizeof(luckboy));
if(foundboy(i))
sum++;
}
printf("%d",sum);
return 0;
}

int foundboy(int u)//u女孩找男友 i表示其现在的男友 当i=0时认为其无男友
{
for(int i=1;i<=m;i++)
{
if(p[u][i]&&!luckboy[i])//luckboy是一个标志(在出现判断前女友能不能找到男友的情况下 才会出现!luckboy为假) 表示i的前女友不能再找i了
{
luckboy[i]=1;// 无论哪一个u女孩第一次通过了上面的判断
//都可以先假设其和i男孩成为了男女朋友
//再看i男孩的前女友能不能找到另一个男友
if(!bg[i]||foundboy(bg[i]))//i没有女友 或i的前女友可以找到另一个男友 不能再找i(否则2人一直找i无限循环)
//通过Luckboy[i]赋值为1来保证 前女友不会在找i了
{
bg[i]=u;
return 1;
}
}

}
return 0;
}

sum记录配对的情况次数

sum++的情况  1.一女生找到一个没有前女友的男生

2.一个女生找到一个有前女友的男生 当其前女友找到了一个新男友(新男友的寻找有一个难点 即不能找原来的男友)

看别人介绍自己代码的时候 说本题算法设计到图论知识(二分图) 感觉自己要做ACM的题 还得先把数据结构看完 盲目的刷题效率是很低的 之前的递推也是如此。更加理解前人种树后人乘凉的意义,以后不再钻牛角尖,认为算法一定要自己推出来,最近学业这么重,深感效率的重要性。

时间: 2024-08-03 20:01:02

acm2063 很难的一题的相关文章

【PAT-一道看着很难的水题】L2-023. 图着色问题

水题!没其他想说的,还以为可以搞点高大上的搜索呢!十五分钟,暴力两重循环就OK了! 代码如下: #include<iostream> #include<stdio.h> #include<string.h> #include<math.h> #include<algorithm> #include<queue> #include<set> #include<vector> #include<map>

Print Article hdu 3507 一道斜率优化DP 表示是基础题,但对我来说很难

Print Article Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others)Total Submission(s): 4990    Accepted Submission(s): 1509 Problem Description Zero has an old printer that doesn't work well sometimes. As it is antique

科目二很难考吗?经验全在这里!

http://news.mydrivers.com/1/375/375180.htm 广州某车管所考试区,陈教练拉了一车学员去考科目二,也就是现在的5必考,等了一上午终于四个学员都考完出来,只有一个顺利通过,教练失落的蹲在一边好可怜.科目二是很多学员的坎儿,五次如果还过不了,就要重新报名,很多人考了四次还没过,跨过这道,后面的就等着拿证了,为啥通过率这么低,小编其实也曾挂了科目二,总结经验,希望能帮到没有考过的. 以广州为例 第一项是坡道定点停车和起步,不少考生在该项目中出现熄火.距离边线距离太

C++004进阶(注:C++很难,传智视频+达内笔记)

6.  函数模板和类模板 前言 C++提供了函数模板(functiontemplate).所谓函数模板,实际上是建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代表.这个通用函数就称为函数模板.凡是函数体相同的函数都可以用这个模板来代替,不必定义多个函数,只需在模板中定义一次即可.在调用函数时系统会根据实参的类型来取代模板中的虚拟类型,从而实现了不同函数的功能. 1)C++提供两种模板机制:函数模板.类模板 2)类属 -- 类型参数化,又称参数模板 使得程序(算法)可以从逻辑

难道Linux入门很难吗?

首先要说明,Linux还是一个很好的系统--当然是针对有一定基础的人来说. 这两天开始教学生用Linux ,因为考虑到要当作服务器来用,因此很容易就选定了CentOS 6,而且是在虚拟机中做实验.后面的问题是,用什么系统来承载虚拟机? 毫无疑问,Windows是学生们最熟悉的系统,各类软件也很多,很好用.唯一的问题是:系统这种东西,毫无疑问是用的越多越容易学会.所以从这个角度说,Windows 不是最好的选择.那么Linux 发行版合适吗? 首先没有QQ ,交流不便.不过学习环境不能上外网,到不

为什么新来的技术很难接手维护一个系统

为什么开发功能变得越来越慢? 某天来一个技术,他跟老板说:这个系统太臃肿了.很乱,我很难开展工作下去,至少很难按照我的经验和设想来实施.如果想让我顺利干下去,办法就是对系统进行重构一次(重构代码,或者开发新的系统替代原来系统). 我们让项目变得可维护性有很多.对公司,对接手的技术,都是有利而无害的. 自己做的成果没法让下一任衔接.就像官员上任,任期满了后.这个烫手的山芋丢给下一任去解决.我这一任期内,维护稳定不出事情就可以. 片面追求gdp指标,就好像片面追求功能的完成,不管功能完成的质量.外行

非嵌入式数据库 软件很难普及 玩大

pg没有 嵌入版我不用 TMD 以后 写软件 就得玩 嵌入式数据库否则 根本 做不大的我是前车之鉴,人家 网页都几十万用户了 我还徘徊在5万以下原因就是 客户端软件的 安装巨麻烦 ,我用的是 sqlserver2005每个用户都安装 sql2005可见 有多失败光售后问题 就能让人 死好几回非嵌入式数据库 软件很难普及 玩大以后 再写软件 就一个exe,不需要安装 可以用weblone再网页中运行,也可以下载下来直接运行 不需要安装

为什么国人很难出高质量开源

FKP-REST是一套全栈javascript框架 为什么国人很难出高质量开源 作者:webkixi 乱侃 今天因为VueJS展开的讨论,话锋转转,就转到这个主题了.这个主题其实也一直是我想要了解的问题,毕竟是 这个FKPJS要走的路.怎么样才能做好开源. 这里先推荐一篇好文,<思考的八种境界>,文章不长,但却有些感悟,第一条就撞在胸口, <一.形成主见>,行文大概意思是:有自己的一套,即便是很浅薄. 是的,即便浅薄,那也是心血所成,正如我正在做的FKPJS,虽然浅薄,但却花费了我

[崩溃]----关于UIScrollView有些你很难知晓的崩溃情形-

为了实现以下的功能(按钮之间的切换效果): 简短的代码如下: // // RootViewController.m // BUG // // Copyright (c) 2014年 Y.X. All rights reserved. // #import "RootViewController.h" @interface RootViewController () { UIView *_showView; } @end @implementation RootViewControlle