首页 > Web开发 > 详细

POJ 1144 Network(tarjan求割点)

时间:2020-05-13 19:47:20      阅读:53      评论:0      收藏:0      [点我收藏+]

题目链接

题目大意

??给定多张无向图,求出每张图中割点数量。

解题思路

??模板题。

代码

const int maxn = 1e2+10;
vector<int> e[maxn];
int low[maxn], dfn[maxn], dn;
bool iscut[maxn];
void tarjan(int u, int fa) {
    dfn[u] = low[u] = ++dn;
    int chd = 0;
    for (int i = 0; i<e[u].size(); ++i) {
        int v = e[u][i];
        if (!dfn[v]) {
            ++chd;
            tarjan(v, u);
            low[u] = min(low[u], low[v]);
            if (low[v]>=dfn[u]&&u!=1) iscut[u] = true;
        }
        else if (low[v]<dfn[u]&& v!=fa)
            low[u] = min(low[u], dfn[v]);
    }
    if (u==1 && chd>=2) iscut[1] = true;
}
int main() {
    int n;
    while(cin>>n&&n) {
        getchar();
        string s;
        while(getline(cin, s)) {
            if (s=="0") break;
            stringstream ss; ss << s;
            int u, v; ss >> u;
            while(ss>>v) {
                e[u].push_back(v);
                e[v].push_back(u);
            }
        }
        tarjan(1, -1);
        int ans = 0;
        for (int i = 1; i<=n; ++i) {
            ans += iscut[i];
            e[i].clear();
        }
        cout << ans << endl;
        zero(low), zero(dfn), zero(iscut); dn = 0;
    }
    return 0;
}

POJ 1144 Network(tarjan求割点)

原文:https://www.cnblogs.com/shuitiangong/p/12884156.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!