本文主要是介绍牛客网考研机试题集合:图的连通分支数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
这里注意图的序号标记是任意的,不是0~n 或1~n;只含有输入的顶点
题目缺少信息!顶点的个数要足够大 ,至少1000010
考点:并查集
也可以使用DFS或BFS
#include<bits/stdc++.h>
using namespace std;
const int MAXSIZE=1000010;int father[MAXSIZE],mark[MAXSIZE];
int findRoot(int x);
int main() {int a,b;fill(father,father+MAXSIZE,-1);set<int> s;while(cin>>a>>b) {s.insert(a);s.insert(b);int fa=findRoot(a);int fb=findRoot(b);if(fa!=fb) {father[fa]=fb;}}int cnt=0;for(auto it=s.begin(); it!=s.end(); it++) {if(father[*it]==-1) {cnt++;}}cout<<cnt<<endl;return 0;
}
int findRoot(int x) {if(father[x]==-1) {return x;} else {int tmp=findRoot(father[x]);father[x]=tmp;return tmp;}
}
这篇关于牛客网考研机试题集合:图的连通分支数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!