zoukankan      html  css  js  c++  java
  • Tarjan 算法求无向图的割顶和桥

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    
    using namespace std;
    const int N = 250;
    
    int head[N], low[N], dfn[N], fa[N];
    int n, m, now = 1, Tarjan_clock;
    bool is_cut[N];
    struct Node{
    	int u, v, nxt;
    }E[N];
    
    inline int read()
    {
    	int x = 0; char c = getchar();
    	while(c < '0' || c > '9') c = getchar();
    	while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
    	return x;
    }
    
    inline void add(int u, int v)
    {
    	E[now].v = v;
    	E[now].nxt = head[u];
    	head[u] = now ++;
    }
    
    void Tarjan(int x, int fa_x)
    {
    	low[x] = dfn[x] = ++ Tarjan_clock;
    	fa[x] = fa_x;
    	for(int i = head[x]; ~ i; i = E[i].nxt)
    	{
    		int v = E[i].v;
    		if(!dfn[v])
    		{
    			Tarjan(v, x);
    			low[x] = min(low[x], low[v]);
    		}
    		else
    			if(v != fa_x)
    				low[x] = min(low[x], dfn[v]);
    	}
    }
    
    inline void August_13th()
    {
    	int root_son = 0;
    	Tarjan(1, 0);
    	for(int i = 2; i <= n; i ++)
    	{
    		int fa_i = fa[i];
    		if(fa_i == 1)
    			root_son ++;
    		else 
    			if(low[i] >= dfn[fa_i])
    				is_cut[fa_i] = 1;
    	}
    	if(root_son > 1)
    		is_cut[1] = 1;
    	for(int i = 1; i <= n; i ++)
    		if(is_cut[i])
    			printf("%d
    ", i);
    	for(int i = 1; i <= n; i ++)
    	{
    		int fa_i = fa[i];
    		if(fa_i > 0 && low[i] > dfn[fa_i])
    			printf("%d,%d
    ",fa_i,i);
    	}
    }
    
    int main()
    {
    	n = read();
    	m = read();
    	for(int i = 1; i <= n; i ++)
    		head[i] = -1;
    	for(int i = 1; i <= m; i ++)
    	{
    		int u = read();
    		int v = read();
    		add(u, v);
    		add(v, u);
    	}
    	August_13th();
    	
    	
    	return 0;
    }
    

      

  • 相关阅读:
    css的position:absolute
    css元素的margin,padding
    Python---Flask--04--SQLAlchemy
    Python---Flask--03--Web表单
    Python---Flask--02--模板
    Python---Flask--01
    国外程序员整理的 PHP 资源大全
    PHP7 通过yum安装
    Node的安装和进程管理
    在php中实现Redis的订阅与发布
  • 原文地址:https://www.cnblogs.com/lyqlyq/p/7352659.html
Copyright © 2011-2022 走看看