╮(╯▽╰)╭ 数蚂蚁
2015-07-31 22:36
253 查看
╮(╯▽╰)╭ 数蚂蚁
TimeLimit: 2000/1000 MS (Java/Others) MenoryLimit: 65536/32768 K (Java/Others)64-bit integer IO format:%I64d
Problem Description
Lh Boy无聊的时候很喜欢数蚂蚁,而且,还给每一只小蚂蚁编号,通过他长期的观察和记录,发现编号为i的蚂蚁会和编号为j的蚂蚁在一起。
现在问题来了,他现在只有他的那本记录本,然而,他想要知道,他所观察的蚂蚁中,有多少堆蚁群。没有记录的编号则作为独自一个一堆。
Input
第一行输入一个整数T,表示有T(1<=T<=25)组测试案例。每一组测试案例,先输入两个整数N和M,分别表示蚂蚁的总数(编号分别为1~N)和记录的条数(1<=N,M<=1000)。紧接着有M行,每一行输入两个数字,a b,表示编号a和编号b的蚂蚁在同一堆里面。在每组测试案例之间都会输入一行空行。
Output
对于每组测试案例,在一行中输出答案。
SampleInput
2 5 3 1 2 2 3 4 5 5 1 2 5
SampleOutput
2 4 解法:就是基础的并查集。。。 代码:
#include <iostream> #include <string.h> #include <stdio.h> #include <map> using namespace std; int ID[10086]; void Cread(int N) { for(int i=0;i<=N;i++)ID[i]=i; } int Find(int x) { int tmp; if(ID[x]!=x)tmp=Find(ID[x]); else tmp=x; ID[x]=tmp; return tmp; } int main() { int N,M,i,j,k,T; scanf("%d",&T); while(T--) { scanf("%d%d",&N,&M); Cread(N); int a,b; int sign=0; for(i=0;i<M;i++) { scanf("%d%d",&a,&b); a=Find(a); b=Find(b); if(a!=b) { sign++; ID[a]=b; } } printf("%d\n",N-sign); } return 0; }
View Code
相关文章推荐
- nginx源码分析(1)- 缘起
- 课堂小计
- GO语言练习:反射
- Golang 简介及配置
- Android大图片裁剪终极解决方案(中:从相册截图)
- <SVN> 代码库迁移
- 华为机试题:超长正整数相加
- Android 动画系列
- (╭ ̄3 ̄)╭ 小希的迷宫II
- 四重简并位点
- AngularJS' Internals In Depth(深入理解 AngularJS)
- 如何设计系统的错误码及错误信息
- STL学习记录(十五):Stack
- 如何设计系统的错误码及错误信息
- 我跟敏捷开发的故事--背景
- Spring MVC 中的基于注解的 Controller
- <Java>short与byte在有符号大数据时的转换
- 【IDF实验室】图片里的英语
- CATranstion动画
- php5.4n 长链接 bug