连通块数量

输入一个无向图,求图中连通块的个数。

输入格式

输入第一行两个整数 n,m(1 \le n, m \le 20000)n,m(1≤n,m≤20000),表示图的点的数量和边的数量,两数之间以一个空格分隔。

接下来 mm 行,每行两个整数 a, b (1 \le a, b \le n)a,b(1≤a,b≤n),表示一条无向边,两数之间以一个空格分隔。

输出格式

输入一行一个整数,表示图中连通块的个数。

#include
#include
int vis[100000];
struct edge{int v,next;
}e[100000];
int p[100000],eid;void insert(int x,int y) {e[eid].v=y;e[eid].next=p[x];p[x]=eid++;
}
void insert2(int x,int y) {insert(x,y);insert(y,x);
}
void dfs(int u) {vis[u]=1;for (int i=p[u];~i;i=e[i].next) {int v=e[i].v;if(!vis[v]) {dfs(v);}}
}
int main() {memset(p,-1,sizeof(p));int n,m;int ans=0;scanf("%d %d",&n,&m);for (int i=0;i

 

 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部