900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > POJ 1144 Network (求割点)

POJ 1144 Network (求割点)

时间:2023-02-06 01:13:30

相关推荐

POJ 1144 Network (求割点)

题意:

给定一幅无向图, 求出图的割点。

割点模板:/Jadon97/p/8328750.html

分析:

输入有点麻烦, 用stringsteam 会比较简单

#include<cstdio>#include<iostream>#include<queue>#include<cstring>#include<string>#include<sstream>#include<map>#include<stack>#include<vector>#include<algorithm>#include<cmath>#define rep(i,a,b) for(int i = a; i < b; i++)#define _rep(i,a,b) for(int i = a; i <= b; i++)using namespace std;const int maxn = 107;vector<int> G[maxn];int n, Index, root, ans;int dfn[maxn], low[maxn], cut[maxn];void tarjan(int u, int father){dfn[u] = Index;low[u] = dfn[u];Index++;int child = 0;for(int i = 0; i < G[u].size(); i++){int v = G[u][i];if(!dfn[v]){child++;tarjan(v, u);low[u] = min(low[v], low[u]);if(low[v] >= dfn[u] && u != root) cut[u] = 1;if(u == root && child == 2) cut[u] = 1;}else if(v != father){low[u] = min(low[u], dfn[v]);}}}int main(){ios::sync_with_stdio(false);while(cin >> n && n){Index = 1;memset(dfn, 0, sizeof(dfn));memset(low, 0, sizeof(low));memset(cut, 0, sizeof(cut));_rep(i,1,n) G[i].clear();root = 1, ans = 0;string input;while(getline(cin, input)){if(input[0] == '0') break;stringstream ss(input);int u, v;ss >> u;while(ss >> v){G[u].push_back(v);G[v].push_back(u);}}tarjan(1,1);_rep(i,1,n) if(cut[i]) ans++;cout << ans << "\n";}return 0;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。