poj 3177 Redundant Paths 边双连通
2014-01-30 15:21
405 查看
出自/article/2753508.html#
#include <iostream> using namespace std; #define MAXV 5010 #define min(a,b) (a>b?b:a) int n,m; bool map[MAXV][MAXV]; bool vis[MAXV]; int low[MAXV],dfn[MAXV]; int count; int cnt[MAXV]; void init(){ memset(vis,0,sizeof(vis)); memset(low,0,sizeof(low)); memset(dfn,0,sizeof(dfn)); count=0; } void dfs(int x,int pre){ int i; vis[x]=1; low[x]=dfn[x]=++count; for(i=1;i<=n;i++){ if(map[x][i]){ if(!vis[i]){ dfs(i,x); low[x]=min(low[x],low[i]); } if(vis[i]==1 && i!=pre){ low[x]=min(low[x],dfn[i]); } } } } int main(){ int a,b; int i,j; while(~scanf("%d%d",&n,&m)){ memset(map,0,sizeof(map)); while(m--){ scanf("%d%d",&a,&b); map[a][b]=map[b][a]=1; } init(); dfs(1,1); memset(cnt,0,sizeof(cnt)); for(i=1;i<=n;i++){ //计算每个点的度 for(j=1;j<=n;j++) if(map[i][j]){ if(low[i]!=low[j]){ cnt[low[j]]++; } } } int ans=0; //计算度为1的点的个数 for(i=1;i<=n;i++){ if(cnt[i]==1) ans++; } printf("%d\n",(ans+1)/2); } return 0; }
相关文章推荐
- poj 3177 Redundant Paths 边双连通
- POJ 3177 Redundant Paths 边双连通分支
- poj 3177 Redundant Paths 边双连通
- 【连通图|边双连通+缩点】POJ-3177 Redundant Paths
- POJ 3177——Redundant Paths——————【加边形成边双连通图】
- POJ 3177 Redundant Paths POJ 3352 Road Construction(双连通)
- [POJ 3177]Redundant Paths[边双连通][Tarjan][缩点]
- poj 3177 Redundant Paths 【无向图增加最少的边是图成为边—双连通】【tarjan求EBC + 缩点 统计度数为1的EBC】
- [kuangbin带你飞]专题九 连通图 E - Redundant Paths POJ - 3177
- poj 3177 Redundant Paths 【图论-边双连通】
- 【POJ】3177 Redundant Paths 边连通
- poj 3177 Redundant Paths 边双连通分量
- poj 3177 Redundant Paths tarjan求桥/割边
- poj 3177【Redundant Paths】
- Redundant Paths POJ - 3177 边双联通分量
- Redundant Paths POJ - 3177
- POJ 3177 Redundant Paths + POJ 3352 Road Construction
- POJ 3177 Redundant Paths 边双(重边)缩点
- POJ 3177 Redundant Paths - from lanshui_Yang
- poj 3177 Redundant Paths 【图论-边双联通】