您的位置:首页 > 其它

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的个数即可。。

#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: