[P1640][SCOI2010]连续攻击游戏
2024-09-03 19:11:42
Link:
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 ;
}
最新文章
- HTML之CSS学习
- 把应用程序exe 注册成为windows 服务的方法
- mysql 主主复制(双主复制)+ 配置KEEPALIVED实现热备
- Interview----链表的倒数第K个元素
- VirtualizingStackPanel
- 06 Linux下Shell介绍
- 实例学习Bloom Filter
- Android 打造自己的个性化应用(一):应用程序换肤主流方式的分析与概述
- fio 测试磁盘性能
- Mycat 镜像-创建 Docker 镜像
- Linux中使用sendmail发送邮件,指定任意邮件发送人
- ANSYS渡槽槽身动水压力的施加(2)——U型渡槽
- getActionBar().setDisplayHomeAsUpEnabled(true)报空指针(已解决)
- kcp协议详解
- 解决问题的思维方式之Problem->;Desgin->;Solution(笔记)
- CentOS7安装GNOME可视化界面
- CMake尝鲜
- Hive 0.12.0安装指南
- 解析纯真IP地址库
- BOOST 实用手册(摘录自校友博客)