题面:

  https://www.lydsy.com/JudgeOnline/problem.php?id=1854

题解:

  1.二分图匹配:

    首先我们发现每件装备只能在两种属性中选一种。因此,我们以每个装备的编号向两种属性分别连边。然后用1-n的属性分别进行向装备的匹配,一旦有一种匹配不上就退出。

    代码:

#include<bits/stdc++.h>

using namespace std;

const int maxn=;
int head[maxn],vis[maxn],fa[maxn],ans,cnt,n,maxx; struct ed{
int next,to;
}e[maxn<<]; void add(int u,int v){
e[++cnt]=(ed){head[u],v};
head[u]=cnt;
} bool hungary(int now,int sign){
for(int i=head[now];i;i=e[i].next){
int tt=e[i].to;
if(vis[tt]==sign) continue;
vis[tt]=sign;
if(!fa[tt]||hungary(fa[tt],sign)){
fa[tt]=now;
return ;
}
}
return ;
} int main(){
scanf("%d",&n);
int u,v;
for(int i=;i<=n;i++){
scanf("%d%d",&u,&v);
add(u,i),add(v,i);
maxx=max(maxx,max(u,v));
}
for(int i=;i<=maxx;i++){
if(!hungary(i,i))
break;
ans++;
}
printf("%d",ans);
return ;
}

   2.并查集: 

    同样的,每种装备的两个属性只能选一个,那么,我们可以将每一种装备看做一条将两种属性相连的边。很显然,这些属性被分成了一个个的联通块。那么不难发现,只有当一个联通块内有环时,这个联通块才能每个属性都被选中,否则(即为一棵树)必须有一个不选,显然不选编号最大的最优。又因为每个点在且仅在一个联通块(单独的一个点也算一个联通块),所以这就满足了并查集的要求。

    代码:

#include<bits/stdc++.h>

using namespace std;

const int maxn=;
int fa[maxn],val[maxn],ans,n; int ffa(int x){
return fa[x]==x?x:fa[x]=ffa(fa[x]);
} int main(){
scanf("%d",&n);
for(int i=;i<=n;i++)
fa[i]=i;
int u,v;
for(int i=;i<=n;i++){
scanf("%d%d",&u,&v);
int fu=ffa(u),fv=ffa(v);
if(fu==fv)
val[fu]++;
else{
fa[fv]=fu;val[fu]++;
val[fu]+=val[fv];
val[fv]=;
}
}
for(int i=;i<=n;i++)
if(val[ffa(i)])
ans++,val[ffa(i)]--;
else break;
printf("%d",ans);
return ;
}

算法比较:

    

    上面是二分图匹配,下面是并查集

BZOJ 1854: [Scoi2010]游戏(二分图匹配/并查集)的更多相关文章

  1. BZOJ 1854: [Scoi2010]游戏( 二分图最大匹配 )

    匈牙利算法..从1~10000依次找增广路, 找不到就停止, 输出答案. --------------------------------------------------------------- ...

  2. bzoj 1854 游戏 二分图匹配 || 并查集

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

  3. HDU-3081-Marriage Match II 二分图匹配+并查集 OR 二分+最大流

    二分+最大流: 1 //题目大意:有编号为1~n的女生和1~n的男生配对 2 // 3 //首先输入m组,a,b表示编号为a的女生没有和编号为b的男生吵过架 4 // 5 //然后输入f组,c,d表示 ...

  4. BZOJ 1854: [Scoi2010]游戏 并查集

    1854: [Scoi2010]游戏 Time Limit: 5 Sec  Memory Limit: 162 MBSubmit: 2672  Solved: 958[Submit][Status][ ...

  5. BZOJ 1854: [Scoi2010]游戏 无向图判环

    题目链接: 题目 1854: [Scoi2010]游戏 Time Limit: 5 Sec Memory Limit: 162 MB 问题描述 lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装 ...

  6. BZOJ 1854: [Scoi2010]游戏 [连通分量 | 并查集 | 二分图匹配]

    题意: 有$n \le 10^6$中物品,每种两个权值$\le 10^4$只能选一个,使得选出的所有权值从1递增,最大递增到多少 一开始想了一个奇怪的规定流量网络流+二分答案做法...然而我还不知道怎 ...

  7. bzoj 1854: [Scoi2010]游戏 (并查集||二分图最大匹配)

    链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1854 写法1: 二分图最大匹配 思路:  将武器的属性对武器编号建边,因为只有10000种 ...

  8. [BZOJ1854][Scoi2010]游戏(二分图匹配/并查集)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1854 分析:很裸的一道二分图匹配对吧,但是在hzwer的blog上看见神奇的并查集做法 ...

  9. ●BZOJ 1854 [Scoi2010]游戏

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=1854 题解: 并查集(还可以用匈牙利算法进行单路增广的二分图匹配) 把每个武器看成是一条边, ...

随机推荐

  1. C#复习笔记(4)--C#3:革新写代码的方式(用智能的编译器来防错)

    用智能的编译器来防错 本章的主要内容: 自动实现的属性:编写由字段直接支持的简单属性, 不再显得臃肿不堪: 隐式类型的局部变量:根据初始值推断类型,简化局部变量的声明: 对象和集合初始化程序:用一个表 ...

  2. mybatis一级缓存详解

    mybatis缓存分为一级缓存,二级缓存和自定义缓存.本文重点讲解一级缓存 一:前言 在介绍缓存之前,先了解下mybatis的几个核心概念: * SqlSession:代表和数据库的一次会话,向用户提 ...

  3. C# Note24: 指针的使用

    C#为了类型安全,默认并不支持指针.但是也并不是说C#不支持指针,我们可以使用unsafe关键词,开启不安全代码(unsafe code)开发模式.在不安全模式下,我们可以直接操作内存,这样就可以使用 ...

  4. Spring 基于XML配置

    基于XML的配置 对于基于XML的配置,Spring 1.0的配置文件采用DTD格式,Spring2.0以后采用Schema格式,后者让不同类型的配罝拥有了自己的命名空间,使得配置文件更具扩展性.此外 ...

  5. vue cli3 vue.config.js 配置详情

    module.exports = {   // 基本路径   baseUrl: process.env.NODE_ENV === 'production'     ? '/'     : '/',   ...

  6. js尾递归函数

    普通递归: function fac(n) { if (n === 1) return 1; return n * fac(n - 1); } fac(5) // 120 这是个阶乘.但是占用内存,因 ...

  7. java学习之—队列

    /** * 队列 * Create by Administrator * 2018/6/11 0011 * 下午 3:27 **/ public class Queue { private int m ...

  8. linux 下crontab -e 命令插入及保存

    由于功能需要,用到linux定时任务. 一般我们都是crontab -e 进去写好定时任务,直接保存退出就可以了,如果是第一次创建定时任务, 系统会选择默认编辑器,就不好保存文件. 在网上参考了一篇文 ...

  9. Partition算法以及其应用详解下(Golang实现)

    接前文,除了广泛使用在快速排序中.Partition算法还可以很容易的实现在无序序列中使用O(n)的时间复杂度查找kth(第k大(小)的数). 同样根据二分的思想,每完成一次Partition我们可以 ...

  10. QTP 自动货测试桌面程序-笔记 (单据-下拉框选择、对话框 、菜单)

    1 录制下拉框使用键盘上下键 回车键选择记录行 Window("驷惠WIN系列[汽车4S连锁管理软件] 6.").Window("采购计划").WinObjec ...