本题介绍两种做法;

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. mysql导出bug备注

    注:yiicms库和area表均存在

  2. Vue 内置指令 && 自定义指令

    1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8" /> 5 & ...

  3. 基于Sikuli GUI图像识别框架的PC客户端自动化测试实践

    写在前面 最近两天,公司有个PC客户端的测试任务,除了最基础的功能测试外,还包括稳定性测试和兼容性测试需求.刚好去年接触过Sikuli这款基于GUI图像识别框架的自动化测试工具,于是便应用于测试工作中 ...

  4. Charles 某音最新版本抓包环境搭建

    本文仅供学习交流使用,如侵立删! Charles 某音最新版本抓包环境搭建 操作环境 google nexus5x Android 8.1 Magisk 24.3 Douyin 17.3 kaliLi ...

  5. Java-面向对象三大特征、设计规则

    1)封装: 1.1)类:封装的是对象的属性和行为 1.2)方法:封装的是具体的业务逻辑实现 1.3)访问控制修饰符:封装的是访问的权限 2)继承: 2.1)作用:代码的复用 2.2)父类/基类:共有的 ...

  6. 部署 Vite 静态网站到 Gitee Pages

    开启仓库的 Gitee Pages 服务,部署目录 dist/: Vite 构建 build,输出到 dist 文件:取消 .gitignore 中的 dist: Vite preview 查看静态网 ...

  7. 100 个常见错误「GitHub 热点速览 v.22.35」

    本周的特推非常得延续上周的特点--会玩,向别人家的女朋友发送早安.这个错误是如何发生的呢?如何有效避免呢?自己用 daily_morning 免部署.定制一个早安小助手给女友吧. 除了生活中的错误,工 ...

  8. B2. Wonderful Coloring - 2

    链接:Problem - 1551B2 - Codeforces 题意:有m个颜色,要求每种颜色内的数字各不相同,问,颜色的最大长度多少. 题解:  判断每个数字的个数,如果大于m,那么最大长度就加一 ...

  9. web前端小知识 —— 【HTML,CSS,JS】集锦 【第一期】 { }

    1.获取元素样式属性的方法 第 一 种 : 较灵活,能获取传进来想获取的元素的样式属性,返回的是[字符串] function getStyle(obj, name) { // IE // 主流 ret ...

  10. Windows Server体验之SSH远程连接

    经过之前的各种远程管理方法,Windows Server可以被很好的管理,也能符合大多数Windows管理员的使用习惯.不过既然是命令行版本的Windows能不能和Linux一样管理呢?Windows ...