传送门:牛客

题目描述:

[USACO11OPEN]Learning Languages S

农夫约翰的 N ( 2 < = N < = 10 , 000 ) N(2<=N<=10,000) N(2<=N<=10,000)只奶牛标号为 1.. N 1..N 1..N,同样的有 M ( 1 < = M < = 30 , 000 ) M(1<=M<=30,000) M(1<=M<=30,000)种牛语标号为 1.. M 1..M 1..M,第i只奶牛会说 K i ( 1 < = K i < = M ) K_i(1<=K_i<=M) Ki​(1<=Ki​<=M)种牛语,分别为 L i 1 , L i 2 , … , L i K i ( 1 < = L i j < = M ) L_i1,L_i2,…,L_{iK_i}(1<=L_ij<=M) Li​1,Li​2,…,LiKi​​(1<=Li​j<=M),农夫的奶牛不是特别聪明,所以 K i K_i Ki​的累加和不大于 100 , 000 100,000 100,000。
两只奶牛只有当他们至少有一门语言一样的时候才可以沟通。否则这两只奶牛就需要别人来帮他们翻译才能交流。换句话说,A和B要进行沟通,他们可以通过 T 1 , T 2 , … , T k T_1,T_2,…,T_k T1​,T2​,…,Tk​来传递,比如A和 T 1 , T 1 T_1,T_1 T1​,T1​和 T 2 , … , T k T_2,…,T_k T2​,…,Tk​和B进行交流。
农夫希望他的奶牛可以多多沟通,所以他买了很多课本去教她的奶牛语言。当然农夫非常的吝啬,他希望买最少的书就可以让所有的奶牛可以交流。你的任务就是帮他算出最少需要买几本书。

输入:
3 3
2 3 2
1 2
1 1
输出:
1

emmm,算是一道有点思维难度的题吧,但是实际难度也不是很高??

主要思路:

  1. 显然我们读完题目之后就会发现这是一道并查集的题目.然后我们就可以开始着手了.
  2. 刚开始我看完题目的想法是用一个并查集来维护父亲以及每一个集合中掌握的所有语言,然后每次枚举奶牛时判断和每一个大集合有无共同语言,但是显然的,这么做是会超时的.我们需要一个更加快捷的方法.所以此时我们需要将脑子转一个方向,为什么我们不记录每一个语言第一个被掌握的奶牛的编号呢.假设我们这么做的话,在之后的枚举中,我们只要判断该语言有没有被之前的人掌握,假设有被掌握,我们就将那个人视为父亲,假设没有掌握,就将lang数组的值赋为自己,反正我们当前这个数因为其他的语言已经成为其他人的儿子了.(这种罗技关系光光讲的话并不是能讲的十分清楚,看不懂就结合代码理解吧)

主要的代码部分:

#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <vector>
#include <map>
#include <set>
#include <queue>
#include <string.h>
#include <stack>
#include <deque>
using namespace std;
typedef long long ll;
#define inf 0x3f3f3f3f
#define root 1,n,1
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
inline ll read() {ll x=0,w=1;char ch=getchar();for(;ch>'9'||ch<'0';ch=getchar()) if(ch=='-') w=-1;for(;ch>='0'&&ch<='9';ch=getchar()) x=x*10+ch-'0';return x*w;
}
#define maxn 1000000
#define ll_maxn 0x3f3f3f3f3f3f3f3f
const double eps=1e-8;
int n,m;
int lang[maxn];
int fa[maxn];
int find(int a) {if(a==fa[a]) return a;else return fa[a]=find(fa[a]);
}
int main() {memset(lang,0,sizeof(lang));n=read();m=read();int num;int l;int ans=n;for(int i=1;i<=n;i++) fa[i]=i;for(int i=1;i<=n;i++) {num=read();for(int j=1;j<=num;j++) {l=read();if(lang[l]) {if(find(i)!=find(lang[l])) {fa[find(i)]=find(lang[l]);ans--;}}else {lang[l]=i;}}}printf("%d\n",ans-1);return 0;
}

刷题记录:牛客NC24608[USACO 2011 Ope S]Learning Languages相关推荐

  1. 刷题记录:牛客NC16129小小粉刷匠

    传送门:牛客 题目描述: "lalala,我是一个快乐的粉刷匠",小名一边快活地唱着歌,一边开心地刷着墙",兴致突然被打断,"小名,你今天如果刷不 完这一栋楼的 ...

  2. 刷题记录:牛客NC17889新建 Microsoft Office Word 文档

    传送门:牛客 题目描述: CSL正在学习<计算机办公自动化>文件的建立与删除. CSL发现,当他新建一个word文档时,会得到一个名为"新建 Microsoft Office W ...

  3. 刷题记录:牛客NC17193简单瞎搞题

    传送门;牛客 题目描述: 一共有 n个数,第 i 个数是 xi xi 可以取 [ l i , r i ] [li , ri] [li,ri] 中任意的一个值. 设 S = ∑ x i 2 S = \s ...

  4. 刷题记录:牛客NC16122郊区春游

    传送门:牛客 题目描述: 今天春天铁子的班上组织了一场春游,在铁子的城市里有n个郊区和m条无向道路,第i条道路连接郊区Ai和Bi, 路费是Ci.经过铁子和顺溜的提议,他们决定去其中的R个郊区玩耍(不考 ...

  5. 刷题记录:牛客NC24083Greedy Gift Takers

    传送门:牛客 题目描述 Farmer John's nemesis, Farmer Nhoj, has NNN cows (1≤N≤1051 \leq N \leq 10^51≤N≤105), con ...

  6. 刷题记录:牛客NC20811蓝魔法师

    传送门:牛客 题目描述: "你,你认错人了.我真的,真的不是食人魔."--蓝魔法师 给出一棵树,求有多少种删边方案,使得删后的图每个连通块大小小于等于k,两种方案不 同当且仅当存在 ...

  7. 刷题记录:牛客NC20875舔狗舔到最后一无所有

    传送门:牛客 题目描述: 作为队伍的核心,forever97很受另外两个队友的尊敬. Trote_w每天都要请forever97吃外卖,但很不幸的是宇宙中心forever97所在的学校周围只有3家fo ...

  8. 刷题记录:牛客NC15162小H的询问

    传送门:牛客 题目描述: 小H给你一个数组{a},要求支持以下两种操作: 1. 0 l r(1<=l<=r<=n),询问区间[l,r]中权值和最大的有效子区间的权值和,一个子区间被认 ...

  9. 刷题记录:牛客NC15447wyh的问题

    传送门:牛客 题目描述: 我国现在能源消耗非常严重,现在政府有这样一个工作,每天早上都需要把一些路灯关掉,但是他们想 让在关闭的过程中所消耗的能源是最少的,负责路灯关闭的工作人员以1m/s的速度进行行 ...

最新文章

  1. 对国内云计算三个现象的思考
  2. CodeForces - 1252G Performance Review(线段树+思维)
  3. python求取列表中的质数
  4. 访问修饰符(C# 编程指南)
  5. mysql 创建表check如何使用_MySQL怎么使用check约束
  6. java foreach并行_使用foreach在Java中迭代并行数组的漂亮方法
  7. oracle 10g rac 停止,Oracle10g RAC 关闭及启动
  8. 计算机ws2_32dll丢失,电脑显示计算机中丢失ws2-32.dll,怎么办
  9. BP神经网络详解+原理
  10. 计算机没有反应的时候怎么重启,电脑卡顿、没响应,如何安全重启计算机?
  11. 猎聘、BOSS、智联、前程无忧这几个招聘网站我都用过
  12. 小白学习性能随笔记1
  13. windows7下使用mingw和msys编译JEPG源代码
  14. Hbase的数据切分
  15. win10系统服务器的ip地址,win10系统查看电脑IP地址和默认网关的操作方法
  16. ffmpeg介绍与命令行基本用法
  17. 北大学霸隐居20年,王青松花光350万后,如今怎么样了?
  18. 2022.04.21【日常维护】|服务器存储清理浅谈
  19. 地图定位技术揭秘(一)
  20. Aspose.Words实用教程:如何处理文档分段——Aspose.Words中的分段

热门文章

  1. Zookeeper、Curator
  2. 关于 Macbook 外接显示器模糊问题
  3. C# 什么是Asp.net Core?和 .net core有什么区别?
  4. 基于Android9的非root环境下frida-gadget持久化
  5. Stable Diffusion 2.0来了,皮卡智能AI早已“抢先”优化升级
  6. 京东打单发货如何识别疫情地区?
  7. oracle会话占用pga异常,OLTP,单个session占pga大于2G,有见过的没?
  8. 联发科MT6750/MT6750T芯片处理器哪个性能比较好?区别在哪?
  9. 二级域名泛解析,让iis支持二级域名泛解析
  10. python123八边形绘制_使用python实现简单的画多边形。