CodeForces - 1209D 并查集
题意:
有 n个不同的糖果,从 1到 n编号。有 k个客人。要用糖果招待客人。对于每个客人,这些糖果中恰有两个是其最爱。第 i个客人最爱的糖果编号是 xi和 y。将 k
个客人任意排列,他们按顺序去拿自己最爱的糖果。
客人要拿到至少一个最爱的糖果才满意。
求不满意的客人的最小数目。
题解:
题目让求不满意客人最小数量,那么就肯定会有这样情况发生:
3 3
1 2
1 3
1 3
刚开始1号客人喜欢1和2糖果,因为1和2号糖果都没被用过,那么我们就先把1号糖果分给1号客人,后面第二个客人喜欢1和3号糖果,因为1号糖果用过了,所以3号糖果给2号客人。后面3号客人喜欢的糖果都被用过了,这个时候就要让1号客人放弃一号糖果去用2号糖果了。
我们也就是要解决放弃某个糖果去用另一个糖果这个抉择过程
这样的话我们可以用并查集,如果一个人喜欢1和2号糖果,那么就让1和2号糖果合并到一个集合里面。
这样的话合并1号糖果和2好糖果就相当于吃了1号或2号糖果中的一个,具体吃的哪个没有确定下来。这样的话就可以解决上面的问题
过程:
如果两个糖果在同一个集合中,说明两个糖果都被吃完了,如果两个糖果不在同一个集合中,说明至少还有一个糖果可以吃,那么把他们吃掉,同时两个集合合并为一个。
代码:
1 #include<stdio.h>
2 #include<string.h>
3 #include<iostream>
4 #include<algorithm>
5 #include<math.h>
6 #include<vector>
7 #include<queue>
8 #include<stack>
9 #include<map>
10 using namespace std;
11 typedef long long ll;
12 const int maxn=1e5+10;
13 const int INF=0x3f3f3f3f;
14 const double eps=1e-10;
15 const int mod = 1e9+7;
16 #define mt(A,B) memset(A,B,sizeof(A))
17 #define lson l,m,rt*2
18 #define rson m+1,r,rt*2+1
19 #define SIS std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
20 int v[maxn];
21 void init(int n)
22 {
23 for(int i=0; i<=n; i++)
24 v[i]=i;
25 }
26 int finds(int x)
27 {
28 if(x==v[x]) return x;
29 return v[x]=finds(v[x]);
30 }
31 bool unite(int x,int y)
32 {
33 x=finds(x);
34 y=finds(y);
35 if(x!=y)
36 {
37 v[x]=y;
38 return true;
39 }
40 return false;
41 }
42 int main()
43 {
44 SIS;
45 int n,k,x,y,ans=0;
46 cin >> n >> k;
47 init(n);
48 for(int i=0; i<k; i++)
49 {
50 cin >> x >> y;
51 if(!unite(x,y)) ans++;
52 }
53 cout << ans << endl;
54 return 0;
55 }
CodeForces - 1209D 并查集的更多相关文章
- Vladik and Entertaining Flags CodeForces - 811E (并查集,线段树)
用线段树维护每一块左右两侧的并查集, 同色合并时若不连通则连通块数-1, 否则不变 #include <iostream> #include <algorithm> #incl ...
- CodeForces - 893C-Rumor(并查集变式)
Vova promised himself that he would never play computer games... But recently Firestorm - a well-kno ...
- 0-1-Tree CodeForces - 1156D (并查集)
大意: 给定树, 边权为黑或白, 求所有有向路径条数, 满足每走过一条黑边后不会走白边. 这题比赛的时候想了个假算法, 还没发现..... 显然所求的路径要么全黑, 要么全白, 要么先全白后全黑, 所 ...
- Codeforces 980 并查集/模拟贪心最小字典序 找规律/数去除完全平方因子 逆思维倍增预处理祖先标记点
A /*Huyyt*/ #include<bits/stdc++.h> #define mem(a,b) memset(a,b,sizeof(a)) #define pb push_bac ...
- Codeforces 1166F 并查集 启发式合并
题意:给你一张无向图,无向图中每条边有颜色.有两种操作,一种是询问从x到y是否有双彩虹路,一种是在x到y之间添加一条颜色为z的边.双彩虹路是指:如果给这条路径的点编号,那么第i个点和第i - 1个点相 ...
- Codeforces 722C(并查集 + 思维)
本文链接:http://www.cnblogs.com/Ash-ly/p/5932712.html 题目链接:http://codeforces.com/problemset/problem/722/ ...
- codeforces 455C 并查集
传送门 给n个点, 初始有m条边, q个操作. 每个操作有两种, 1是询问点x所在的连通块内的最长路径, 就是树的直径. 2是将x, y所在的两个连通块连接起来,并且要合并之后的树的直径最小,如果属于 ...
- CodeForces 566D 并查集集合合并
#include <stdio.h> #include <algorithm> #define MAX 100000 #define LL long long #define ...
- CodeForces - 1209D Cow and Snacks 并查集
CodeForces - 1209D 题意 现在n种点心,每种点心只有一份,有k位客人,每位客人有两种想要吃的点心,你可以安排他们进场的顺序,每位客人会吃掉所有他想要吃的,并且还没被吃掉的点心.如果客 ...
随机推荐
- ORA-12560错误
ora-12560错误是一个经典错误之一 下面我们分析一下这个错误: 产生这个错误的原因是什么呢? 1.oracle服务没有启动 Linux下查看$ps -ef | grep ora_ windows ...
- 20.java设计模式之解释器模式
基本需求 实现四则运算,如计算a+b-c+d的值 先输入表达式的形式,如a+b-c+d,要求表达式正确 再分别输出a,b,c,d的值 最后求出结果 传统方案 编写一个方法,接收表达式的形式,根据用户输 ...
- 查看Java的汇编指令
在IDEA配置VM options,打印汇编指令 -XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly windows系统 下载插件 hsdis-amd6 ...
- .NET Core 问题记录
前言: 最近在项目中遇到了遇到了写部署步骤过多的问题,为了减少.net core项目部署步骤:需要对一些基础问题进行验证: 如端口设置.单页应用程序(angluar)合并部署方式等相关问题,特将解决过 ...
- saltstack 服务器批量管理
学习saltstack 服务器批量管理 1.saltstack 简介 SaltStack是一个开源的.新的基础平台管理工具,使用Python语言开发,同时提供Rest API方便二次开发以及和其他运维 ...
- RVA与FOA的转换
主要取决于文件对齐与内存对齐的值
- 对话 CTO〡用声音在一起,听荔枝 CTO 丁宁聊 UGC 声音互动平台的技术世界 原创 王颖奇 极客公园 2018-12-01
https://mp.weixin.qq.com/s/jfHFXZpzbAEbHKkCMSev6w 对话 CTO〡用声音在一起,听荔枝 CTO 丁宁聊 UGC 声音互动平台的技术世界 原创 王颖奇 极 ...
- 网络编程中 TCP 半开连接和TIME_WAIT 学习
https://blog.csdn.net/chrisnotfound/article/details/80112736 上面的链接就是说明来 SO_KEEPALIVE 选项 为什么还需要 在应用层开 ...
- OSS与文件系统的对比 文件存储 块存储 对象存储
基本概念介绍_开发指南_对象存储 OSS-阿里云 https://help.aliyun.com/document_detail/31827.html 强一致性 Object 操作在 OSS 上具有 ...
- Docker中运行nginx
Docker中运行nginx 1.Docker中运行nginx 2.配置文件 2.1 nginx.conf 2.2 default.conf 3.docker的镜像可以挂什么卷 部分内容原文地址: C ...