bzoj 1854: [Scoi2010]游戏 (并查集||二分图最大匹配)
链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1854
写法1: 二分图最大匹配
思路: 将武器的属性对武器编号建边,因为只有10000种属性,我们直接对1-10000跑二分图匹配,同时用时间戳优化匹配。
实现代码:
#include<bits/stdc++.h>
using namespace std;
const int M = 1e6+;
vector<int>g[M];
int vis[M],pre[M],t,n;
bool dfs(int u){
for(int i = ;i < g[u].size();i ++){
int v = g[u][i];
if(vis[v] ^ t){
vis[v] = t;
if(!pre[v]||dfs(pre[v])){
pre[v] = u;
return ;
}
}
}
return ;
} int main()
{
int u,v;
scanf("%d",&n);
for(int i = ;i <= n;i ++){
scanf("%d%d",&u,&v);
g[u].push_back(i);
g[v].push_back(i);
}
for(int i = ;i <= ;i ++){
++t;
if(!dfs(i)){
printf("%d\n",i-);
break;
}
}
return ;
}
思路2: 并查集
把每个武器的属性a,b连成一条边,这样就会形成一幅图,对于图中的每个联通块来说,如果当前联通块没有环,那么一定会有任意p-1个点满足条件(p为联通块大小),如果联通块中存在环的话,那么这p个点都满足条件,我们将p个点都标记下,如果没有环的话,我们不选择最大的那个点,因为属性是从小到大选的,优先选择小的,维护的话,并查集合并的时候将顶点小的并查集并到顶点大的并查集,并且标记掉小的并查集的顶点。
实现代码;
#include<bits/stdc++.h>
using namespace std;
const int M = 1e6+;
int f[M],vis[M],n;
int Find(int x){
if(x == f[x]) return x;
return f[x] = Find(f[x]);
} void mix(int x,int y){
int fx = Find(x),fy = Find(y);
if(fx == fy){
vis[fx] = ;
}
else {
if(fx < fy) swap(fx,fy);
vis[fy] = ;
f[fy] = fx;
}
} int main()
{
int u,v;
scanf("%d",&n);
for(int i = ;i <= ;i ++) f[i] = i;
for(int i = ;i <= n;i ++){
scanf("%d%d",&u,&v);
mix(u,v);
}
for(int i = ;i <= ;i ++){
if(!vis[i]){
printf("%d\n",i-);
break;
}
}
return ;
}
bzoj 1854: [Scoi2010]游戏 (并查集||二分图最大匹配)的更多相关文章
- BZOJ 1854: [Scoi2010]游戏 并查集
1854: [Scoi2010]游戏 Time Limit: 5 Sec Memory Limit: 162 MBSubmit: 2672 Solved: 958[Submit][Status][ ...
- 1854: [Scoi2010]游戏[并查集]
1854: [Scoi2010]游戏 Time Limit: 5 Sec Memory Limit: 162 MBSubmit: 4938 Solved: 1948[Submit][Status] ...
- BZOJ 1854: [Scoi2010]游戏( 二分图最大匹配 )
匈牙利算法..从1~10000依次找增广路, 找不到就停止, 输出答案. --------------------------------------------------------------- ...
- ●BZOJ 1854 [Scoi2010]游戏
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=1854 题解: 并查集(还可以用匈牙利算法进行单路增广的二分图匹配) 把每个武器看成是一条边, ...
- BZOJ 1854: [Scoi2010]游戏 无向图判环
题目链接: 题目 1854: [Scoi2010]游戏 Time Limit: 5 Sec Memory Limit: 162 MB 问题描述 lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装 ...
- BZOJ 1854: [Scoi2010]游戏(二分图匹配/并查集)
题面: https://www.lydsy.com/JudgeOnline/problem.php?id=1854 题解: 1.二分图匹配: 首先我们发现每件装备只能在两种属性中选一种.因此,我们以每 ...
- BZOJ 1854: [Scoi2010]游戏 [连通分量 | 并查集 | 二分图匹配]
题意: 有$n \le 10^6$中物品,每种两个权值$\le 10^4$只能选一个,使得选出的所有权值从1递增,最大递增到多少 一开始想了一个奇怪的规定流量网络流+二分答案做法...然而我还不知道怎 ...
- bzoj 1854: [Scoi2010]游戏
#include<cstdio> #include<iostream> #include<cstring> #define M 2000008 using name ...
- 【bzoj1854】[Scoi2010]游戏 - 并查集
lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示.当他使用某种装备时,他只能使用该装备的某一个属性.并且每种装备最多只能使 ...
随机推荐
- 基于Tornado签名cookie源码设计API认证
想法1 服务端客户端个保存相同的一串字符串,客户端发送API请求时带着这段字符串来我服务端做校验,通过则返回相应数据,否则拒绝访问 弊端 黑客截取到请求信息,可直接会获取到该字符串,想服务端发送请求并 ...
- 剑指Offer-- 之字形顺序打印二叉树
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推 /* struct TreeNode { int val ...
- Python入门-字符串常用方法
Python 字符串 字符串是 Python 中最常用的数据类型.我们可以使用引号('或")来创建字符串. 创建字符串很简单,只要为变量分配一个值即可. var1 = 'Hello Worl ...
- 01-JavaScript介绍
JavaScript价绍 1.引言 Web前端有三层: HTML:从语义的角度,描述页面结构 CSS:从审美的角度,描述样式(美化页面) JavaScript:从交互的角度,描述行为(提升用户体验) ...
- iOS开发——无网占位图的实现
https://www.jianshu.com/p/d537393fe247 https://github.com/wyzxc/CQPlaceholderViewhttps://github.com/ ...
- Vue之子组件
全局组件 <script src="./static/vue.min.js"></script> // 导入vue <body> <div ...
- 软件工程(FZU2015) 增补作业
SE_FZU目录:1 2 3 4 5 6 7 8 9 10 11 12 13 说明 张老师为FZU软件工程2015班级添加了一次增补作业,总分10分,deadline是2016/01/01-2016/ ...
- [转帖]Linux下fork函数及pthread函数的总结
Linux下fork函数及pthread函数的总结 https://blog.csdn.net/wangdd_199326/article/details/76180514 fork Linux多进程 ...
- [转帖]前端-chromeF12 谷歌开发者工具详解 Console篇
前端-chromeF12 谷歌开发者工具详解 Console篇 https://blog.csdn.net/qq_39892932/article/details/82655866 趁着搞 cloud ...
- java随笔2 变量类定义
如果要定义变量为对象,就要创建此对象对应的java类, 且定义的类型为类名,且都为private