洛谷 P1640 BZOJ 1854 [SCOI2010]连续攻击游戏

简介: 题目描述 lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示。当他使用某种装备时,他只能使用该装备的某一个属性。并且每种装备最多只能使用一次。

题目描述

lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示。当他使用某种装备时,他只能使用该装备的某一个属性。并且每种装备最多只能使用一次。游戏进行到最后,lxhgww遇到了终极boss,这个终极boss很奇怪,攻击他的装备所使用的属性值必须从1开始连续递增地攻击,才能对boss产生伤害。也就是说一开始的时候,lxhgww只能使用某个属性值为1的装备攻击boss,然后只能使用某个属性值为2的装备攻击boss,然后只能使用某个属性值为3的装备攻击boss……以此类推。现在lxhgww想知道他最多能连续攻击boss多少次?

输入输出格式

输入格式:

 

输入的第一行是一个整数N,表示lxhgww拥有N种装备接下来N行,是对这N种装备的描述,每行2个数字,表示第i种装备的2个属性值

 

输出格式:

 

输出一行,包括1个数字,表示lxhgww最多能连续攻击的次数。

 

输入输出样例

输入样例#1:
3
1 2
3 2
4 5
输出样例#1:
2

说明

Limitation

对于30%的数据,保证N < =1000

对于100%的数据,保证N < =1000000

来源:SCOI 2010

 

解题思路

  先手算一波,发现自己手算的过程就是匈牙利算法啊,于是套上板子即可。

  这里有个vis数组,1e6太大了,不能每次都清零vis,否则会超时的。这里引入一个时间标签,用时间戳cnt替换掉true,就不用每次都清零vis了,用vis[u]==cnt替换vis[u]==true即可

源代码

#include<vector>
#include<cstdio>
using namespace std;
int n;
struct men{
    vector<int> t;//备用的tyre#滑稽
    int lover;
}man[1000010];
int woman[1000010]={0};
int vis[1000010]={0};
int cnt=0;//避免每次清零vis
bool dfs(int u)
{
    int sz=man[u].t.size();
    for(int i=0;i<sz;i++)
    {
        int w=man[u].t[i];
        if(vis[w]!=cnt)
        {
            vis[w]=cnt;
            if(!woman[w]||dfs(woman[w]))
            {
                woman[w]=u;
                man[u].lover=w;
                return 1;
            }
        }
    }
    return 0;
}


int main()
{
    scanf("%d",&n);
    for(int i=1,u,v;i<=n;i++)
    {
        scanf("%d%d",&u,&v);
        man[u].t.push_back(i);
        man[v].t.push_back(i);
        man[i].lover=0;
    }
    for(int i=1;i<=n;i++)
    {
        cnt++;
        if(!dfs(i))
        {
            printf("%d\n",i-1);
            return 0;
        }
    }
    printf("%d",n);
    return 0;
}

 

目录
相关文章
|
前端开发 JavaScript 测试技术
如何在Vue3项目中集成ESLint+Prettier+Stylelint+Husky?
如何在Vue3项目中集成ESLint+Prettier+Stylelint+Husky?
784 0
|
JSON API 数据格式
docker详解
docker详解
157 0
|
JavaScript
Vue的select,input点击后放大问题
Vue的select,input点击后放大问题
4款五星级的3D模型资源包
HI,晚上好各位,今晚我们将为大家介绍4款五星级的3D模型资源包。 ANIMALS FULL PACK ANIMALS FULL PACK包含了由PROTOFACTOR制作的24款高质量的动物模型,包含了:大象、狐狸、犀牛、斑马、狼、鸽子等 每种动物模型都包含FBX文件,预制件和纹理,并且提供PBR着色器和Legacy着色器,资源包中的动物也有不同状态下的动画,例如:闲置、奔跑、死亡、攻击、咆哮等。
|
JavaScript 前端开发 区块链
以太坊区块链入门
区块链是什么?一句话,它是一种特殊的(非关系型)分布式数据库,这种数据库只能做插入和查找操作,并且没有管理员。
5983 0
|
Java
JAVA将单词首字母大写方法
public class FirstLetterUppercase { public static void main(String[] args){ System.out.println(new FirstLetterUppercase().
1529 0
|
10天前
|
存储 关系型数据库 分布式数据库
PostgreSQL 18 发布,快来 PolarDB 尝鲜!
PostgreSQL 18 发布,PolarDB for PostgreSQL 全面兼容。新版本支持异步I/O、UUIDv7、虚拟生成列、逻辑复制增强及OAuth认证,显著提升性能与安全。PolarDB-PG 18 支持存算分离架构,融合海量弹性存储与极致计算性能,搭配丰富插件生态,为企业提供高效、稳定、灵活的云数据库解决方案,助力企业数字化转型如虎添翼!
|
9天前
|
存储 人工智能 Java
AI 超级智能体全栈项目阶段二:Prompt 优化技巧与学术分析 AI 应用开发实现上下文联系多轮对话
本文讲解 Prompt 基本概念与 10 个优化技巧,结合学术分析 AI 应用的需求分析、设计方案,介绍 Spring AI 中 ChatClient 及 Advisors 的使用。
408 130
AI 超级智能体全栈项目阶段二:Prompt 优化技巧与学术分析 AI 应用开发实现上下文联系多轮对话