裸的匹配题,一眼就能看出来二分图的模型,是某个经典题的改编。貌似某本图论书上讲过的,有N个人以及M个职位,每个职位只能提供给一个人,而每个人由于能力有限只能胜任有限个职位,问是否有办法使得每个人都有工作,如果不能,最多能给多少个人提供工作。如果看过这道经典题的话,这题的思路就顺秒了:将n道题看成n个点属于二分图的x部,将m个锦囊看成m个点属于y部,用匈牙利算法做这个二部图的匹配,当某个点不能匹配时算法结束

值的一说的是,由于这个二部图的特性,x部每个点有且仅有2条边与y部相连,利用这个特性能够大大优化这个算法(下面这个程序属于无脑敲的匈牙利,没用这个优化。。。。竟然也能过)

#include<iostream>

#include<cstdio>

#include <math.h>

#include <string.h>

using namespace std;

intmatch[1009],visit[1009]={0},n,map[1009][1009]={0};

int dfs(int k)

{

for (int i=0;i<=n-1;i++)

{

if (map[k][i]==1 && visit[i]==0)

{

visit[i]=1;

if ((match[i]==-1) || (dfs(match[i])==1))

{

match[i]=k;

return 1;

}

}

}

return 0;

}

int main()

{

int m,ans=0,x,y;

scanf("%d%d",&n,&m);

for (int i=1;i<=m;i++)

{

scanf("%d%d",&x,&y);

map[i][x]=1;

map[i][y]=1;

}

memset(match,255,sizeof(match));

for (inti=1;i<=m;i++)

{

memset(visit,0,sizeof(visit));

if (dfs(i)==1)ans++;else break;

}

printf("%d",ans);

scanf("%d%d",&n,&m);

return0;

}

最新文章

  1. ES6之块级作用域
  2. [分享] 很多人手机掉了,却不知道怎么找回来。LZ亲身经历讲述手机找回过程,申请加精!
  3. C#中Process类的使用
  4. github研究
  5. QCon 2015 阅读笔记 - 团队建设
  6. Css基础-id选择器
  7. C++小技巧之CONTAINING_RECORD
  8. redis实战笔记
  9. 1.使用RNN做MNIST分类
  10. File和FileStream的区别
  11. map函数和filter函数 zip函数
  12. Ajax的异步与同步(async)
  13. @synchronized深入理解
  14. set unused的用法(ORACLE删除字段)
  15. django ORM 增删改查 模糊查询 字段类型 及参数等
  16. 学以致用十二-----YouCompeteMe巨坑
  17. 【repost】对JAVASCRIPT匿名函数的理解(透彻版)
  18. c setjmp longjmp
  19. (转)灵活控制 Hibernate 的日志或 SQL 输出,以便于诊断
  20. Mina.Net实现的断线重连

热门文章

  1. 【NumPy学习指南】day5 改变数组的维度
  2. ThreadLocal使用,应用场景,源码实现,内存泄漏
  3. JavaScript的语音识别
  4. 快学UiAutomator创建第一个实例
  5. apache shiro的工作流程分析
  6. MFC:AfxLoadLibrary-将指定的 DLL 映射到调用进程的地址空间
  7. Python基础篇 -- 列表
  8. graphviz layer 教程(非布局)
  9. TCP头校验和计算算法详解
  10. (25)zabbix事件通知