codevs2751军训分批
2015-12-30 17:09
155 查看
2751 军训分批
时间限制: 1 s
空间限制: 16000 KB
题目等级 : 钻石 Diamond
题解
题目描述 Description
某学校即将开展军训。共有N个班级。
前M个优秀班级为了保持学习优势,必须和3位任课老师带的班级同一批。
问共有几批?
输入描述 Input Description
N,M
老师教的其他班级(M行)
输出描述 Output Description
批次数
样例输入 Sample Input
4 2
1 1 1
2 3 1
样例输出 Sample Output
2
数据范围及提示 Data Size & Hint
对于50%数据,N,M<=1000.
对于100%数据,N,M<=30000,N<=M.
SB并查集水题,合并完查询father[i]=i的个数即可。。
时间限制: 1 s
空间限制: 16000 KB
题目等级 : 钻石 Diamond
题解
题目描述 Description
某学校即将开展军训。共有N个班级。
前M个优秀班级为了保持学习优势,必须和3位任课老师带的班级同一批。
问共有几批?
输入描述 Input Description
N,M
老师教的其他班级(M行)
输出描述 Output Description
批次数
样例输入 Sample Input
4 2
1 1 1
2 3 1
样例输出 Sample Output
2
数据范围及提示 Data Size & Hint
对于50%数据,N,M<=1000.
对于100%数据,N,M<=30000,N<=M.
SB并查集水题,合并完查询father[i]=i的个数即可。。
#include<cstdio> using namespace std; int n,m,i,j,x,father[30001],ans=0; int find(int x) { if (father[x]==x) return father[x]; father[x]=find(father[x]); return father[x]; } void merge(int x1,int y1) { int f1=find(x1),f2=find(y1); if (f1!=f2) father[f1]=f2; } int main() { scanf("%d %d",&n,&m); for (i=1;i<=n;i++) father[i]=i; for (i=1;i<=m;i++) for (j=1;j<=3;j++) { scanf("%d",&x); merge(i,x); } for (i=1;i<=n;i++) if (father[i]==i) ans++; printf("%d",ans); return 0; }
相关文章推荐
- 151230_开启RakNet之旅
- Spring 学习笔记 (IV) 之 Spring 的事务
- thread详解
- nginx upstream timed out (110: Connection timed out) while reading response header from upstream
- 研究生研究-滑铁卢
- ElasticSearch集群出现脑裂
- Android LayoutAnimation 与 LayoutTransition
- Android事件分发机制完全解析,带你从源码的角度彻底理解(下)
- 二次真机调试
- AIDL:进程间通信
- 最小二乘(LS)与总体最小二乘(TLS)总结一
- WebService入门HelloWS
- 罗里吧嗦之Gradle学习过程
- linux使用xinetd自定义服务
- 我的Python成长之路---第一天---Python基础(作业1:登录验证)---2015年12月26日(雾霾)
- OKI5860sp打印机正确安装驱动后,打印提示错误的解决方法
- 将VC++项目配置为64位平台
- leetcode刷题日记——Search a 2D Matrix
- java proxy
- typedef