syhd142  
日历
<2024年5月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678
统计
  • 随笔 - 23
  • 文章 - 122
  • 评论 - 31
  • 引用 - 0

导航

常用链接

留言簿(2)

随笔档案(23)

文章分类(270)

文章档案(122)

我的豆瓣

搜索

  •  

最新评论

阅读排行榜

评论排行榜

 
割边水题,套模板的题目。
#include <iostream>
#include 
<vector>
using namespace std;

const int N = 201;
bool bridge[N][N]; //bridge数组为1的说明是割边
int low[N], d[N];//Low数组保存最远祖先,d数组为深度
int color[N], bcnt;
vector
<int> g[N];//用前需清空g[N]容器,bridge数组,color数组和bcnt

void dfs(int u, int parent, int deep )
{
    color[u] 
= 1;
    d[u] 
= low[u] = deep;
    
for(int i = 0; i < g[u].size(); i++ )
    {
        
int v = g[u][i];
        
if(color[v] == 1 && v != parent)
            low[u] 
= low[u] < d[v] ? low[u] : d[v];
        
if(color[v] == 0)
        {
            dfs(v, u, deep 
+ 1);
            low[u] 
= low[u] < low[v] ? low[u] : low[v];
            
if(low[v] > d[u])    //u v 是桥 
            {
                bcnt
++;
                bridge[u][v] 
= bridge[v][u] = 1;
            }
        }
    }
    color[u] 
= 2;
}

int main()
{        
    
int n;
    
while(~scanf("%d"&n))
    {
        memset(bridge, 
falsesizeof(bridge));
        bcnt 
= 0;
        
for(int i = 0; i < N; i++)
        {
            g[i].clear();
            color[i] 
= 0;
        }
        
for(int i = 0; i < n; i++)
        {
            
int a, b, c;
            scanf(
"%d (%d)"&a, &c);
            
for(int j = 0; j < c; j++)
            {
                scanf(
"%d"&b);
                g[a].push_back(b);
                g[b].push_back(a);
            }
        }
        
for(int i = 0; i < n; i++)
        {
            
if(!color[i]) dfs(i, 00);
        }
        printf(
"%d critical links\n", bcnt);
        
for(int i = 0; i < n; i++)
        {
            
for(int j = i + 1; j < n; j++)
            {
                
if(bridge[i][j]) printf("%d - %d\n", i, j); 
            } 
        }
        printf(
"\n");
    }  
    
return 0;
}
posted on 2010-07-16 10:54 Fucker 阅读(479) 评论(0)  编辑 收藏 引用 所属分类: ACM/ICPC图论简单

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


 
Copyright © Fucker Powered by: 博客园 模板提供:沪江博客