zoukankan      html  css  js  c++  java
  • poj 3177 Redundant Paths 边双连通

    出自http://blog.csdn.net/wangjian8006/article/details/7990666#

    #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
    ",(ans+1)/2);
    	}
    	return 0;
    }


     

  • 相关阅读:
    覆盖率测试工具gcov的前端工具_LCOV
    LTE切换与TAU问题
    LTE 切换过程中的数据切换
    TCP数据流稳定性--TCP分片,重组及乱序
    【Android
    【Android
    【Android
    【RN
    【RN
    【RN
  • 原文地址:https://www.cnblogs.com/vermouth/p/3710169.html
Copyright © 2011-2022 走看看