题目:共有N个任务,每个任务之间可能有关联。将有关系的划分为1组,求可以划分为几组。
输入:任务N,关系M,以及M行有关系的X,Y。
输出:可以划分的组数。
示例:
输入:
4 3
0 1
2 3
0 2
输出:
1
代码:
#include<iostream>
using namespace std;
//寻找两个元素之间是否有关系
int find(int x){
if(pre[x] == x) return x;
else{
pre[x] = find(pre[x]);
return pre[x];
}
}
//连接两个有关系的元素
void merge(int x,int y){
pre[find(y)] = find(x);
return;
}
int main(){
int n,m,p,pre[1005],x,y,sum=0,flag[1005]={0};
cin>>n>>m;
for(int i = 0;i < n;++i){
pre[i] = i;
}
for(int i = 0;i < m;++i){
cin>>x>>y;
merge(x,y);
}
for(int i = 0;i < n;++i){
if(flag[find(i)]==0) {
sum++;
flag[find(i)]=1;
}
}
cout<<sum<<endl;
return 0;
}
本文介绍了使用C++编程语言通过并查集算法解决任务分组问题,旨在计算任务间的关联关系可以分成多少个独立的组。通过对输入的任务数量N和关系数量M的处理,以及解析M行的关系描述,最终输出分组的数量。


被折叠的 条评论
为什么被折叠?



