zoukankan      html  css  js  c++  java
  • poj 3352 边连通分量

    思路与poj3177一模一样。

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<queue>
    #define Maxn 1010
    #define Maxm Maxn*Maxn
    #define inf 0x7fffffff
    using namespace std;
    int dfn[Maxn],low[Maxn],degree[Maxn],e,n,lab,index[Maxn];
    struct Edge{
        int to,from,next,v;
    }edge[Maxm];
    void init()
    {
        memset(dfn,0,sizeof(dfn));
        memset(low,0,sizeof(low));
        memset(degree,0,sizeof(degree));
        memset(index,-1,sizeof(index));
        e=lab=0;
    }
    void addedge(int from, int to)
    {
        edge[e].v=0;
        edge[e].from=from;
        edge[e].to=to;
        edge[e].next=index[from];
        index[from]=e++;
        edge[e].v=0;
        edge[e].from=to;
        edge[e].to=from;
        edge[e].next=index[to];
        index[to]=e++;
    }
    void dfs(int u)
    {
        dfn[u]=low[u]=++lab;
        int i,j,temp;
        for(i=index[u];i!=-1;i=edge[i].next)
        {
            temp=edge[i].to;
            if(edge[i].v) continue;
            edge[i].v=edge[i^1].v=1;
            if(!dfn[temp])
            {
                dfs(temp);
                low[u]=min(low[u],low[temp]);
            }
            low[u]=min(low[u],dfn[temp]);
        }
    }
    int solve()
    {
        int i,j,temp=0;
        for(i=1;i<=n;i++)
        {
            for(j=index[i];j!=-1;j=edge[j].next)
            {
                if(low[i]!=low[edge[j].to])
                    degree[low[i]]++;
            }
        }
        for(i=1;i<=n;i++)
            if(degree[i]==1)
                temp++;
        return (temp+1)/2;
    }
    int main()
    {
        int m,i,j,a,b;
        while(scanf("%d%d",&n,&m)!=EOF)
        {
            init();
            for(i=1;i<=m;i++)
            {
                scanf("%d%d",&a,&b);
                addedge(a,b);
            }            
            dfs(1);
            printf("%d
    ",solve());
            
        }
        return 0;
    }
  • 相关阅读:
    二叉查找树
    二叉树
    广度优先搜索
    深度优先搜索
    algorithm:next_permutation
    Grafana Labs 携手阿里云,将提供国内首款 Grafana 托管服务
    台积电TSMC一些技术特点
    TSMC台积电各种制程工艺技术
    激光雷达激烈竞争市场
    边端云处理器系列技术参数
  • 原文地址:https://www.cnblogs.com/wangfang20/p/3202033.html
Copyright © 2011-2022 走看看