CodeForces 277A Learning Languages (并检查集合)
A. Learning Languages
The "BerCorp" company has got
n employees. These employees can use m approved official languages for the formal correspondence. The languages are numbered with integers from
1 to m. For each employee we have the list of languages, which he knows. This list could be empty, i. e. an employee may know no official languages. But the employees are willing to learn
any number of official languages, as long as the company pays their lessons. A study course in one language for one employee costs
1 berdollar.
Find the minimum sum of money the company needs to spend so as any employee could correspond to any other one (their correspondence can be indirect, i. e. other employees can help out translating).
The first line contains two integers
n and m (2 ≤ n, m ≤ 100) — the number of employees and the number of languages.
Then n lines follow — each employee's language list. At the beginning of the
i-th line is integer
ki (0 ≤ ki ≤ m) — the number of languages the
i-th employee knows. Next, the
i-th line contains ki integers —
aij (1 ≤ aij ≤ m) — the identifiers of languages the
i-th employee knows. It is guaranteed that all the identifiers in one list are distinct. Note that an employee may know zero languages.
The numbers in the lines are separated by single spaces.
Print a single integer — the minimum amount of money to pay so that in the end every employee could write a letter to every other one (other employees can help out translating).
5 5
1 2
2 2 3
2 3 4
2 4 5
1 5
0
8 7
0
3 1 2 3
1 1
2 5 4
2 6 7
1 3
2 7 4
1 1
2
2 2
1 2
0
1
In the second sample the employee
1 can learn language 2, and employee
8 can learn language 4.
In the third sample employee
2 must learn language 2.
题目链接:http://codeforces.com/problemset/problem/277/A
题目大意:n个员工。m种语言。每一个员工会k种语言,问总共还要学习多少语言,能够让每两个员工能够直接或者间接交流
题目分析:非常明显的并查集问题,注意当k等于0时,该员工必学一门语言。具体见程序凝视
#include <cstdio>
#include <cstring>
int a[105], fa[105]; void UF_set()
{
for(int i = 0; i < 105; i++)
fa[i] = i;
} int Find(int x)
{
return x == fa[x] ? x : fa[x] = Find(fa[x]);
} void Union(int a, int b)
{
int r1 = Find(a);
int r2 = Find(b);
if(r1 != r2)
fa[r2] = r1;
} int main()
{
int n, m, cnt = 0, ans = 0; //ans表示理论上须要学习的人数,cnt表示没人学的
scanf("%d %d", &n, &m);
memset(a, 0, sizeof(a));
UF_set();
for(int i = 0; i < n; i++)
{
int k, fir, next;
scanf("%d", &k);
if(k == 0) //若一门语言都不会。则必要学一门
{
ans++;
continue;
}
scanf("%d", &fir);
a[fir] ++;
for(int i = 1; i < k; i++)
{
scanf("%d", &next);
a[next]++;
Union(fir, next);
}
}
for(int i = 1; i <= m; i++)
{
if(a[i] == 0) //记录没人学的
cnt++;
if(fa[i] == i) //记录集合个数
ans++;
}
//没人学的必定自成一个集合,我们要把它减去,由于既然没一个人学
//它就不须要再被学,若ans等于m说明每两个人之间不能交流。则每人都要学习
//一门语言,否则拿集合个数减去没人学的语言个数再减1,这里减1的含义是
//随意n个集合,n-1条线就能将其连通
printf("%d\n", (cnt == m) ? n : ans - cnt - 1);
}
版权声明:本文博主原创文章。博客,未经同意不得转载。
CodeForces 277A Learning Languages (并检查集合)的更多相关文章
- [Codeforces Round #170 Div. 1] 277A Learning Languages
A. Learning Languages time limit per test:2 seconds memory limit per test:256 megabytes input standa ...
- Codeforces 278C Learning Languages(并查集)
题意抽象出来就是求联通块的个数吧,然后添加最少边使图联通. 注意所有人都不会任何语言的时候,答案是n而不是n-1. #include<algorithm> #include<iost ...
- BZOJ3296: [USACO2011 Open] Learning Languages
3296: [USACO2011 Open] Learning Languages Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 81 Solved: ...
- HDU 1272 小希迷宫(并检查集合)
意甲冠军:被判处无向图无环和连接无处不在 思考:并检查集合,trap 您可能有一个直接输入0 0 并且....合并的时候按某一个方向会爆栈,爆了好几次...下次考虑一下直接递归找祖先吧 #includ ...
- BZOJ3296:Learning Languages(简单并查集)
3296: [USACO2011 Open] Learning Languages Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 436 Solved ...
- C. Learning Languages 求联通块的个数
C. Learning Languages 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring&g ...
- codeforces 277 A Learning Languages 【DFS 】
n个人,每个人会一些语言,两个人只要有会一门相同的语言就可以交流,问为了让这n个人都交流,至少还得学多少门语言 先根据n个人之间他们会的语言,建边 再dfs找出有多少个联通块ans,再加ans-1条边 ...
- hdu1325 Is It A Tree?并检查集合
pid=1325">职务地址 试想一下,在词和话题hdu1272是一样的. 可是hdu1272的博文中我也说了.数据比較水,所以我用非并查集的方法就AC了. 可是这题的数据没那么水,要 ...
- URAL - 1966 - Cycling Roads(并检查集合 + 判刑线相交)
意甲冠军:n 积分,m 边缘(1 ≤ m < n ≤ 200),问:是否所有的点连接(两个边相交.该 4 点连接). 主题链接:http://acm.timus.ru/problem.aspx? ...
随机推荐
- JAVA程序生成XML标准化的文件格式,缩进,美化。
//他开始Document映射到文件 TransformerFactory transFactory = TransformerFactory.newInstance(); Transformer t ...
- Xamarin之 环境错误集锦
错误信息: connection of the layout renderer failed.this may be caused by a misconfiguration of java .p ...
- 【原创】shadowebdict开发日记:基于linux的简明英汉字典(一)
全系列目录: [原创]shadowebdict开发日记:基于linux的简明英汉字典(一) [原创]shadowebdict开发日记:基于linux的简明英汉字典(二) [原创]shadowebdic ...
- hdu 2391 Filthy Rich
单纯dp 水一 处理时间点,第一行和第一列特殊处理: 其余的w[i][j]=show(w[i-1][j-1],w[i-1][j],w[i][j-1]); <span style="fo ...
- shell文字过滤程序(十):cut命令
[版权声明:转载请保留源:blog.csdn.net/gentleliu.Mail:shallnew at 163 dot com] cut指挥类似至awk,从行内提取的信息,它是一个较弱的版本的功能 ...
- 搬寝室 hdu
Problem Description 搬寝室是很累的,xhd深有体会.时间追述2006年7月9号,那天xhd迫于无奈要从27号楼搬到3号楼,因为10号要封楼了.看着寝室里的n件物品,xhd开始发呆, ...
- Quartz2D裁剪圆形头像
// 0. 载入原有图片 UIImage *image = [UIImage imageNamed:icon]; // 1.创建图片上下文 CGFloat margin = border; CGSiz ...
- 关于程序猿怎样降低程序Bug的若干建议
毫无疑问,程序猿是善于思考问题的一族. 一个程序的编写都是通过:思考.设计.编写.调试.測试以及执行这些主要的阶段. 但大部分程序猿都有一个问题就是不太愿意測试自己的代码. 他们草草的调式完毕以后就觉 ...
- CareerCup它1.8 串移包括问题
[称号] 原文: 1.8 Assume you have a method isSubstring which checks if one word is a substring of another ...
- 返璞归真 asp.net mvc (1) - 添加、查询、更新和删除的 Demo
原文:返璞归真 asp.net mvc (1) - 添加.查询.更新和删除的 Demo [索引页] [源码下载] 返璞归真 asp.net mvc (1) - 添加.查询.更新和删除的 Demo 作者 ...