首页 > 代码库 > 连通分量 poj3352
连通分量 poj3352
有重边的话重边就不被包含在双连通里了
#include <cstdio>#include <vector >using namespace std;const int maxn=1001;vector<int >G[maxn];int low[maxn],dfn[maxn];bool vis[maxn];int dg[maxn];int dep,cnt;void dfs(int s,int f){ low[s]=dfn[s]=++dep; vis[s]=true; for(int i=0;i<G[s].size();i++){ int t=G[s][i]; if(t==f)continue; if(!vis[t]){ dfs(t,s); low[s]=min(low[s],low[t]); } else low[s]=min(low[s],dfn[t]); }}int n,r;int main(){ scanf("%d%d",&n,&r); int f,t; while(r--){scanf("%d%d",&f,&t);G[f].push_back(t);G[t].push_back(f);} dfs(1,-1); for(int i=1;i<=n;i++){ for(int j=0;j<G[i].size();j++){ if(low[i]!=low[G[i][j]])dg[low[i]]++; } } int ans=0; for(int i=1;i<=n;i++){ if(dg[i]==1)ans++; } ans=(ans+1)/2; printf("%d\n",ans); return 0;}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。