本题介绍两种做法;

1 并查集

 1 #include<bits/stdc++.h>
2 using namespace std;
3 const int N=1000005;
4 int fa[N],n;
5 bool vis[N];
6
7 int getf(int a){
8 if(fa[a]==a) return a;
9 else return fa[a]=getf(fa[a]);
10 }
11
12 void mg(int a,int b){
13 int af=getf(a);
14 int bf=getf(b);
15 if(af==bf) vis[af]=true;
16 else{
17 if(af<bf) swap(af,bf);
18 vis[bf]=true;
19 fa[bf]=af;
20 }
21 }
22
23 int main()
24 {
25 memset(vis,false,sizeof(vis));
26 cin>>n;
27 for(int i=1;i<=n+1;i++) fa[i]=i;
28 for(int i=1;i<=n;i++){
29 int a,b;
30 cin>>a>>b;
31 mg(a,b);
32 }
33 for(int i=1;i<=n+1;i++){
34 if(!vis[i]){
35 cout<<i-1;
36 break;
37 }
38 }
39 return 0;
40 }

2 更普遍的做法,也是更容易想到的,用二分图匹配来做,

将每个武器的两个属性分别向武器连边,因为是连续攻击(即从1开始),我们从1开始匹配,直到不能匹配为止,此时就得到答案。

代码中T表示时间戳,代替了匈牙利算法每次的memset(vis)。

 1 #include<bits/stdc++.h>
2 using namespace std;
3 const int N=1000005;
4 int adj[N],lk[N],id[N];
5 int to[2*N],nex[2*N];
6 int T,tot;
7
8 int read()
9 {
10 int a=0,f=1; char c=getchar();
11 while (c<'0'||c>'9') {if (c=='-') f=-1; c=getchar();}
12 while (c>='0'&&c<='9') {a=a*10+c-'0'; c=getchar();}
13 return a*f;
14 }
15
16 void ins(int x,int y){
17 nex[++tot]=adj[x];
18 adj[x]=tot;
19 to[tot]=y;
20 }
21
22 bool mt(int x){
23 for(int i=adj[x];i;i=nex[i]){
24 int v=to[i];
25 if(id[v]==T) continue;
26 id[v]=T;
27 if(!lk[v]||mt(lk[v])){
28 lk[v]=x;
29 return 1;
30 }
31 }
32 return 0;
33 }
34
35 int main(){
36 int n=read(),i,x,y;
37 for(i=1;i<=n;i++) {
38 x=read();y=read();
39 ins(x,i);ins(y,i);
40 }
41 for(i=1;i<=10000;i++){
42 T++;
43 if(!mt(i)) break;
44 }
45 cout<<i-1;
46 return 0;
47 }

洛谷P1640 SCOI2010 连续攻击游戏 (并查集/匹配)的更多相关文章

  1. 洛谷 P1640 SCOI2010 连续攻击游戏 并查集

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

  2. 洛谷 P1640 [SCOI2010]连续攻击游戏 解题报告

    P1640 [SCOI2010]连续攻击游戏 题目描述 lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示.当他使用某种装备 ...

  3. 洛谷——P1640 [SCOI2010]连续攻击游戏

    P1640 [SCOI2010]连续攻击游戏 题目描述 lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示.当他使用某种装备 ...

  4. 洛谷—— P1640 [SCOI2010]连续攻击游戏

    https://www.luogu.org/problem/show?pid=1640 题目描述 lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1, ...

  5. 洛谷P1640 [SCOI2010]连续攻击游戏(二分图)

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

  6. 洛谷P1640 [SCOI2010]连续攻击游戏 题解

    题目链接: https://www.luogu.org/problemnew/show/P1640 分析: 这道题用二分图来解决即可.应该可以作为网络流中的模板题来食用, 每一个武器有两个属性,但是只 ...

  7. [洛谷P1640][SCOI2010]连续攻击游戏

    题目大意:有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示.每种装备最多只能使用一次,且只能使用其中一种属性.装备所使用的属性值必须从1开始连续.问最多能攻击多少次? ...

  8. 洛谷 P1640 [SCOI2010]连续攻击问题

    洛谷 一句话题意: 每个武器有两种属性,每种武器只能选择一种属性,从属性1连续递增才算攻击,求最大连续攻击次数. 因为同学告诉我这是二分图最大匹配,自然就往那个方向去想. 那么怎么建图呢? 每个武器只 ...

  9. 洛谷 P1640 【连续攻击游戏】

    question bank :luogu question Number :1640 title :Continuous attacking game link :https://www.luogu. ...

随机推荐

  1. 2022-7-12 第五组 pan小堂 js

    JavaScript Switch 语句 (熟悉掌握) 请使用 switch 语句来选择多个需被执行的代码块之一. 语法: switch(表达式){ case n: 代码块 break; case n ...

  2. Python3.7爬虫:实时api(百度ai)检测验证码模拟登录(Selenium)页面

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_134 今天有同学提出了一个需求,老板让自动登录这个页面:https://www.dianxiaomi.com/index.htm, ...

  3. Java学习 (六)基础篇 类型转换

    类型转换 由于Java是强类型语言,所以要进行有些运算的时候,需要用到类型转换 字节大小(容量)-> 低--------------------------------------------- ...

  4. 故障案例 | 一次慢SQL优化分析全过程

    欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 客 ...

  5. SpringBoot 01 概述

    官方文档 https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/ 简介 SpringBoot 是一个 JavaWeb ...

  6. spring接口多实现类,该依赖注入哪一个?

    一.问题的描述 在实际的系统应用开发中我经常会遇到这样的一类需求,相信大家在工作中也会经常遇到: 同一个系统在多个省份部署. 一个业务在北京是一种实现方式,是基于北京用户的需求. 同样的业务在上海是另 ...

  7. Queue-jumpers - 平衡树

    题面 Ponyo and Garfield are waiting outside the box-office for their favorite movie. Because queuing i ...

  8. 「题解报告」P3354

    P3354 题解 题目传送门 一道很恶心的树形dp 但是我喜欢 题目大意: 一片海旁边有一条树状的河,入海口有一个大伐木场,每条河的分叉处都有村庄.建了伐木场的村庄可以直接处理木料,否则要往下游的伐木 ...

  9. mysql explain总结

    Explain 包含字段 id select_type table type possible_keys key key_len ref rows extra 字段解释 1. id id 相同则执行顺 ...

  10. Linux零拷贝原理

    Linux零拷贝原理 前言 磁盘可以说是计算机系统最慢的硬件之一,读写速度相差内存 10 倍以上,所以针对优化磁盘的技术非常的多,比如零拷贝.直接 I/O.异步 I/O 等等,这些优化的目的就是为了提 ...