/* HDU 1232 */
来源:互联网 发布:c二维数组初始化为0 编辑:程序博客网 时间:2024/06/09 13:52
/* HDU 1232 */
#include <stdio.h>
int fa[1100];
int kind[1100],tot;
int Find(int x) { // 查询这个点属于哪个集合
return fa[x] = (x == fa[x]) ? x : Find(fa[x]);
}
void merge(int a, int b) { // 连接这两个点
a = Find(a);
b = Find(b);
if(a == b) return ; // 如果他们属于同一个集合,就不需要再连接了
fa[a] = b;
}
int exist(int x) {
for(int i=0; i<tot; i++) if(kind[i] == x) return 1;
return 0;
}
int main() {
while(~scanf("%d%d", &n, &m)) {
for(int i=1; i<=n; i++) fa[i] = i;
int a,b;
while(m--) {
scanf("%d%d", &a ,&b);
merge(a,b);
}
tot = 0;
for(int i=1; i<=n; i++) {
if(!exist(Find(i))) kind[tot ++] = Find[i];
}
printf("%d\n", tot);
}
return 0;
}
#include <stdio.h>
int fa[1100];
int kind[1100],tot;
int Find(int x) { // 查询这个点属于哪个集合
return fa[x] = (x == fa[x]) ? x : Find(fa[x]);
}
void merge(int a, int b) { // 连接这两个点
a = Find(a);
b = Find(b);
if(a == b) return ; // 如果他们属于同一个集合,就不需要再连接了
fa[a] = b;
}
int exist(int x) {
for(int i=0; i<tot; i++) if(kind[i] == x) return 1;
return 0;
}
int main() {
while(~scanf("%d%d", &n, &m)) {
for(int i=1; i<=n; i++) fa[i] = i;
int a,b;
while(m--) {
scanf("%d%d", &a ,&b);
merge(a,b);
}
tot = 0;
for(int i=1; i<=n; i++) {
if(!exist(Find(i))) kind[tot ++] = Find[i];
}
printf("%d\n", tot);
}
return 0;
}
- HDU 1232
- HDU 1232
- HDU 1232
- hdu 1232
- HDU 1232
- hdu 1232
- HDU 1232
- hdu 1232
- hdu 1232
- /* HDU 1232 */
- HDU 1232
- HDU 1232
- hdu 1232
- hdu 1232
- HDU 1232
- HDU 1232
- HDU 1232
- hdu 1232
- adb server is out of date. killing...
- iOS的主要框架介绍
- KBuild MakeFile介绍
- POJ 1308 Is It A Tree?
- C语言信号量的基本操作
- /* HDU 1232 */
- double变量的C++ 输出时的小数点后的位数控制
- UVA 1450
- Maya: 菜单Create > Polygon Primitives > Prism
- 菜鸟讲堂之 OCX控件注册
- android中service启动activity
- 基于词典的翻译
- multimap 多重映照容器
- Maya: 菜单Create > Polygon Primitives > Helix