Link:

P1640 传送门

Solution:

可以发现这道题其实是属性值集合和装备集合的对应,且每个点只能用一次

那么就能想到二分图最大匹配,一旦不可行直接退出就行了

Tip:

1、$Hungry$算法连有向边就行了……

2、注意左右两个集合范围不同!

Code:

#include <bits/stdc++.h>

using namespace std;
const int MAXN=1e4+;//边数和Y集合点数都为1e6级别
struct edge{int nxt,to;}e[];
int n,x,y,match[],vis[MAXN],head[MAXN],tot; void add(int from,int to)
{e[++tot].nxt=head[from];e[tot].to=to;head[from]=tot;} int dfs(int u)
{
vis[u]=true;
for(int i=head[u];i;i=e[i].nxt)
{
int m=match[e[i].to];
if(m==-||!vis[m]&&dfs(m))
{match[e[i].to]=u;return ;}
}
return ;
} int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)//Hungry直接连单向边就行了
scanf("%d%d",&x,&y),add(x,i),add(y,i); int res=;memset(match,-,sizeof(match));
for(int i=;i<=;i++)
{
memset(vis,,sizeof(vis));
if(dfs(i)) res++;
else break;
}
printf("%d",res);
return ;
}

最新文章

  1. HTML之CSS学习
  2. 把应用程序exe 注册成为windows 服务的方法
  3. mysql 主主复制(双主复制)+ 配置KEEPALIVED实现热备
  4. Interview----链表的倒数第K个元素
  5. VirtualizingStackPanel
  6. 06 Linux下Shell介绍
  7. 实例学习Bloom Filter
  8. Android 打造自己的个性化应用(一):应用程序换肤主流方式的分析与概述
  9. fio 测试磁盘性能
  10. Mycat 镜像-创建 Docker 镜像
  11. Linux中使用sendmail发送邮件,指定任意邮件发送人
  12. ANSYS渡槽槽身动水压力的施加(2)——U型渡槽
  13. getActionBar().setDisplayHomeAsUpEnabled(true)报空指针(已解决)
  14. kcp协议详解
  15. 解决问题的思维方式之Problem-&gt;Desgin-&gt;Solution(笔记)
  16. CentOS7安装GNOME可视化界面
  17. CMake尝鲜
  18. Hive 0.12.0安装指南
  19. 解析纯真IP地址库
  20. BOOST 实用手册(摘录自校友博客)

热门文章

  1. 第三周main参数传递-1 课堂测试
  2. 利用最新Apache解析漏洞(CVE-2017-15715)绕过上传黑名单
  3. 1006. Team Rankings
  4. pypcap 安装
  5. [New learn] 网络基础-apache本地服务搭建(支持php)
  6. tornado write render redirect IP
  7. Hive 体系学习
  8. 微信openid和UnionID (多公众号如何判断是否是同一人)
  9. CCF试题:高速公路(Targin)
  10. string与int的相互转换以及把一个字符加入到string的末尾