uva315(求割点模板题)

来源:互联网 发布:中国cpi数据分析 编辑:程序博客网 时间:2024/06/05 23:39

题目大意:让你求割点数目
直接上模板。。
题目链接

#include<cstdio>#include<cstring>#include<iostream>#include<vector>#include<algorithm>using namespace std;const int mx = 105;vector<int>G[mx];int low[mx],pre[mx],dfn,cut;bool iscut[mx];int n;void init(){    for(int i = 1; i <= n; i++)        G[i].clear();    memset(low,0,sizeof(low));    memset(pre,0,sizeof(pre));    memset(iscut,0,sizeof(iscut));    dfn = 0,cut = 0;}void dfs(int u,int fa){    low[u] = pre[u] = ++dfn;    int child = 0;    for(int i = 0; i < G[u].size(); i++){        int v = G[u][i];        if(!pre[v]){            dfs(v,u);            child++;            low[u] = min(low[u],low[v]);            if(low[v] >= pre[u])                iscut[u] = true;        }        else if(v != fa){            low[u] = min(low[u],pre[v]);        }    }    if(fa < 0 && child == 1) iscut[u] = 0;}int main(){    while(scanf("%d",&n)&&n){        int u,v;        init();        while(scanf("%d",&u)&&u){            while(getchar()!='\n'){                scanf("%d",&v);                G[u].push_back(v);                G[v].push_back(u);            }        }        dfs(1,-1);        int ans = 0;        for(int i = 1; i <= n; i++)            if(iscut[i])                ans++;        printf("%d\n",ans);    }    return 0;}
原创粉丝点击