「SCOI2010」连续攻击游戏
传送门
Luogu
解题思路
二分图匹配,关键是建图。
如果我们naive地直接把每个武器的两个属性分为两部建图的话,显然是跑不了的。
我们考虑把每一个武器的属性向它连边:\(a_i \rightarrow i,b_i \rightarrow i\)
然后我们从属性这一部从小到大枚举,寻找增广路,直到找不到就输出答案。
细节注意事项
- 咕咕咕
 
参考代码
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <cctype>
#include <cmath>
#include <ctime>
#define rg register
using namespace std;
template < typename T > inline void read(T& s) {
	s = 0; int f = 0; char c = getchar();
	while (!isdigit(c)) f |= c == '-', c = getchar();
	while (isdigit(c)) s = s * 10 + c - 48, c = getchar();
	s = f ? -s : s;
}
const int _ = 10010;
const int __ = 1000010;
int tot, head[_], nxt[__ << 1], ver[__ << 1];
inline void Add_edge(int u, int v)
{ nxt[++tot] = head[u], head[u] = tot, ver[tot] = v; }
int vis[__], bel[__];
inline int dfs(int u) {
	for (rg int i = head[u]; i; i = nxt[i]) {
		int v = ver[i];
		if (vis[v]) continue; vis[v] = 1;
		if (!bel[v]) return bel[v] = u, 1;
		else if (dfs(bel[v])) return bel[v] = u, 1;
	}
	return 0;
}
int main() {
#ifndef ONLINE_JUDGE
	freopen("in.in", "r", stdin);
#endif
	int n; read(n);
	for (rg int a, b, i = 1; i <= n; ++i)
		read(a), read(b), Add_edge(a, i), Add_edge(b, i);
	int ans = 0;
	for (rg int i = 1; i <= 10000; ++i) {
		memset(vis, 0, sizeof (int) * (n + 1));
		if (dfs(i)) ++ans; else break;
	}
	printf("%d\n", ans);
	return 0;
}
完结撒花 \(qwq\)
「SCOI2010」连续攻击游戏的更多相关文章
- LG1640 「SCOI2010」连续攻击游戏  二分图最大匹配
		
问题描述 LG1640 题解 一开始以为是把\((a,b)\)作为左右部点,发现\(n \le 1000000\),建图是\(O(n^2)\)的,会爆掉 属性值向\(i\)建边. \(\mathrm{ ...
 - 洛谷P1640 【SCOI2010】连续攻击游戏
		
原题传送门 题目描述 lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示.当他使用某种装备时,他只能使用该装备的某一个属性. ...
 - 「Githug」Git 游戏通关流程
		
Githug 他喵的这是个啥!?难道不是 GitHub 拼错了么,和 Git 什么关系? 和游戏又有什么关系? 其实,他的元身在这里:https://github.com/Gazler/githug ...
 - 【LOJ】#2067. 「SDOI2016」硬币游戏
		
题解 c一样的就是一个独立的游戏 我们对于2和3的指数 sg[i][j] 表示\(c \cdot 2^i \cdot 3^j\)的棋子,只有这个硬币是反面,翻转的硬币是正面的sg值 枚举sg函数所有可 ...
 - @loj - 2004@ 「SDOI2017」硬币游戏
		
目录 @description@ @solution@ @accepted code@ @details@ @description@ 周末同学们非常无聊,有人提议,咱们扔硬币玩吧,谁扔的硬币正面次数 ...
 - 题解 「HDU6403」卡片游戏
		
link Description 桌面上摊开着一些卡牌,这是她平时很爱玩的一个游戏.如今卡牌还在,她却不在我身边.不知不觉,我翻开了卡牌,回忆起了当时一起玩卡牌的那段时间. 每张卡牌的正面与反面都各有 ...
 - 题解 「SDOI2017」硬币游戏
		
题目传送门 Description 周末同学们非常无聊,有人提议,咱们扔硬币玩吧,谁扔的硬币正面次数多谁胜利. 大家纷纷觉得这个游戏非常符合同学们的特色,但只是扔硬币实在是太单调了. 同学们觉得要加强 ...
 - 【LOJ 2004】「SDOI2017」硬币游戏
		
LOJ 2004 100pts 首先我们肯定要建AC自动机的.. 那么这题就肯定是个AC自动机上\(dp\). 所以想想状态. 首先如果我们把状态设成这样行不行: \(dp(i)\)表示匹配到了i节点 ...
 - 【LOJ】#2182. 「SDOI2015」寻宝游戏
		
题解 终于了解怎么动态维护虚树了 就是把点按照dfs序排个序啊 这道题显然是求虚树上所有边长的两倍 我们把dfs序排完序,相邻两个点加上路径长(包括首尾),删除的时候删一个点减去它到两边再加上新近相邻 ...
 
随机推荐
- Maven中配置jdk的版本
			
在单个项目中配置 在maven项目的pom.xml文件中加入以下内容 <build> <plugins> <plugin> <groupId>org.a ...
 - pair node stack vector string priority_queue
			
multiset 元素重复 自动排序 map #include <bits/stdc++.h> using namespace std; map<int,int> s;//自当 ...
 - nm
			
nm是names的缩写,功能是列出目标文件的符号清单,常用来查看动态链接库中的函数. nm选项 -a 按照man手册,仅列出调试信息,实际上却是调试信息+正常信息 -A 增加一列显示目标文件, ...
 - centos无法启动之fstab
			
你可能由于对磁盘管理,修改了/etc/fstab文件,进行自动挂载,但是卸载磁盘后,忘记修改/etc/fstab文件,导致了如下启动linux错误,开启进入紧急模式 error getting aut ...
 - redis 基础 Redis 数据类型
			
String(字符串) Hash(哈希) List(列表) Set(集合) zset(sorted set:有序集合)
 - pagehelper 分页不生效,总页数总是1解决方案
			
问题: 后台查询后的数据只有1页,已经设置了PageHelper也没用 PageHelper.startPage(pageNum,pageSize); ModelAndView mv=new Mode ...
 - 1-9springboot之thymeleaf常用语法(html页面)
			
一.引用命名空间 <html xmlns:th="http://www.thymeleaf.org"> 在html中引入此命名空间,可避免编辑器出现html验证错误,虽 ...
 - 吴裕雄--天生自然ORACLE数据库学习笔记:Oracle系统调优
			
--修改 alter system set large_pool_size=64m; --显示 show parameter large_pool_size; select sum(getmisses ...
 - FTP虚拟账户
			
部署一个内网FTP服务器 为了解决公司员工文件存储和下载的需求.要求部署内部FTP服务器,员工可以通过自己的账号的权限对FTP进行操作. 1)公司公共文件可以通过匿名下载 2)公司财务部.商务部.行政 ...
 - frp 配置
			
前言 对于没有公网 IP 的内网用户来说,远程管理或在外网访问内网机器上的服务是一个问题. 今天给大家介绍一款好用内网穿透工具 FRP,FRP 全名:Fast Reverse Proxy.FRP 是一 ...