洛谷P1640 [SCOI2010]连续攻击游戏 题解
2024-08-28 02:10:46
题目链接:
https://www.luogu.org/problemnew/show/P1640
分析:
这道题用二分图来解决即可.应该可以作为网络流中的模板题来食用,
每一个武器有两个属性,但是只能取一个用,由此我们便可以想到与二分图挂钩。
二分图匹配当中,一个点只能和一个点匹配
问题当中要从小到大使用所有属性,所以肯定要有以1…10000属性为点的一侧
把装备放在另一侧,装备和它的两个属性连边.
(也就相当于从左到右一连,再从右到左一连,才相当于用了两个属性。
从小到大匹配属性点,
因为题目要求必须要每个技能依次释放,所以要有else break环节,这是一个网络流二分图中需要重点注意的环节,有时要加而有时不要,这里要加上还是比较好理解的。
代码:
#include<cstdio>
#include<vector>
#include<cmath>
using namespace std;
vector<int>v[10005];
int vis[1000005],link[1000005];
int t;
bool find(int x)//二分图模板,简单而且理解也不难,墙裂建议借鉴
{
for(int i=0;i<v[x].size();i++)
{
int p=v[x][i];
if(vis[p]!=t)
{
vis[p]=t;
if(link[p]==0||find(link[p]))
{
link[p]=x;
return 1;
}
}
}
return 0;
}
int main()
{
int n;
scanf("%d",&n);
int maxf=0;
for(int i=1;i<=n;i++)
{
int a,b;
scanf("%d%d",&a,&b);
v[a].push_back(i);
v[b].push_back(i);
}
int cnt=0;
for(int i=1;i<=n;i++)
{
t++;
if(find(i))
{
cnt++;
}
else
break;
}
printf("%d\n",cnt);
return 0;
}
最新文章
- A*寻路算法
- 2015 MVP OpenDay 及 Community Camp 演讲PPT分享
- 【C语言入门教程】2.2 常量 与 变量
- nginx_tomcat负载均衡环境
- UITableViewCell分割线左边部分缺少一些的解决方法
- SqlSever中Index Seek的匹配规则(一)
- C++注意事项锦集
- java,<;E>;什么意思?
- Kooboo中怎么新增一个关联的Details 动态页面。
- 使用Doxygen工具生成Cocos2D-x 2.1.0文档
- BNUOJ 34985 Elegant String 2014北京邀请赛E题 矩阵快速幂
- c++野指针 之 实战篇
- vs2015web工程中的html引用压缩后css后无法智能提示的问题解决
- 二分 Intel Code Challenge Elimination Round (Div.1 + Div.2, combined) D
- BZOJ 4568: [Scoi2016]幸运数字 [线性基 倍增]
- golang 读书笔记
- MySQL中varchar最大长度是多少?
- 转Git配置SSH,并Push到GitHub上的相关流程
- hive中的with用法
- _itemmod_refresh