题目描述
某省的交通部门已经建造了m条双向公路,用来连接省里的n个城市,现在省里想把所有城市都连起来,需要统计一下当前的公路网里,从首府(1号城市)出发,有多少城市是到达不了的。
输入输出格式
输入格式:
第一行n和m,表示n个点和m条无向边
接下来m行,每行x、y,表示连接x和y的一条无向边
输出格式:
一个数字,表示从1出发不能到达的点数
输入输出样例
输入样例1:
6 4
4 5
3 4
1 5
2 6
输出样例1:
2
测试点
共5个测试点,一个20分。
数据范围:
100%:n<=10^5, m<=10^6
代码如下:
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5+5;
vector <int> g[maxn];
bool vis[maxn];
int ans=0;
void dfs(int x){
ans++;
for(int i=0;i<g[x].size();i++){
int y=g[x][i];
if(vis[y]==1) continue;
vis[y]=1;
dfs(y);
}
}
int main(){
int n,m;
cin>>n>>m;
for(int i=1;i<=m;i++){
int x,y,w;
cin>>x>>y;
g[x].push_back(y);
g[y].push_back(x);
}vis[1]=1;
dfs(1);
cout<<n-ans;
return 0;
}
代码供参考,如果对您有帮助,给我个关注吧!