第一題

題目描述

該題的目的是要你統計圖的連通分支數。

輸入描述:

每個輸入文件包含若干行,每行兩個整數i,j,表示節點i和j之間存在一條邊。

輸出描述:

輸出每個圖的聯通分支數。

輸入

1 4
4 3
5 5

輸出

2

版本1

深搜,還可以用並查集做

#include<bits/stdc++.h>
using namespace std;
const int maxn=500001;
int vis[maxn];
vector<int> G[maxn];
void dfs(int r){
	vis[r]=1;
	for(int i=0;i<G[r].size();i++){
		int v = G[r][i];
		if(vis[v]) continue;
		dfs(v);
	}
}
int main(){
	int u,v; 
	fill(vis,vis+maxn,1);
	while(cin>>u>>v){
		G[u].push_back(v);
		G[v].push_back(u);
		vis[u]=vis[v]=0;
	}
	int cnt=0;
	for(int i=0;i<maxn;i++){
		if(vis[i]==0){
			dfs(i);
			cnt++;
		}
	}
	cout<<cnt<<endl;
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章