hdu 1232

来源:互联网 发布:淘宝付款失败钱扣了 编辑:程序博客网 时间:2024/05/29 14:15
#include<cmath>#include<cctype>#include<cstring>#include<algorithm>#include<numeric>#include<vector>#include<set>#include<map>#include<queue>#include<list>#include<stack>using namespace std;int V,E;vector<vector<int>>edges;vector<int>marked;void dfs(int s){    marked[s] =1;    for (int x : edges[s]) {        if (!marked[x])            dfs(x);    }}int fun(void){    int a, b;    while (E--) {        scanf("%d%d", &a, &b);        edges[a].push_back(b);        edges[b].push_back(a);    }    int cnt = 0;    for (int c = 1; c <= V; c++) {        if (!marked[c]) {            dfs(c);            cnt++;//这里算是统计的一共有多少连通块,每dfs一次便+1;        }    }    return cnt;}int main(void){    //freopen("vs_cin.txt", "r", stdin);    while (scanf("%d%d", &V, &E) && V) {        marked.resize(V+1);        edges.resize(V+1);        printf("%d\n", fun()-1);//这里的-1也不难理解,如果所有节点已经连通,即只有一块,那就需要修建0条路,也就是1-1=0;        edges.clear();        marked.clear();//最开始忘了要清空数据,结果做了好几次都不对,天天用的resize+clear每次遇到都被坑;    }}
0 0
原创粉丝点击