POJ 1515 无向连通图定向边改造为强连通 边双连通

本篇博客探讨了如何将无向连通图中的边定向,尽可能多地形成强连通图。首先明确了图必须是连通的,并且强调桥是无法定向的。通过双连通分量找出桥,移除后对每个连通分支进行DFS遍历,定向经过的边以确保强连通。最终输出定向后的边连接情况。
摘要由CSDN通过智能技术生成

题意:

n个点m条无向边(保证图连通)

问:把尽量多的无向边定向,使得最终图保持强连通的特性。

输出:

案例数

最终图的所有单向边 ( 若是不能被定向的无向边则输出u,v && v,u表示2条无向边 )

#

 

思路:

显然桥是不能被定向的,双连通求出桥。

去掉桥后,对于每个连通分支,可以dfs遍历一遍把经过的边定向,这样一定保证连通分量是强连通的。

 

 

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<queue>
#include<math.h>
#define N 1005
#define M 1000005
using namespace std;

int n,m;//n个点 m条边
struct node
{
	int from,to,nex;
	int cut;//记录这条边是否为割边 
}edge[2*M];//双向边则 edge[i]与edge[i^1]是2条反向边
int head[N] ,edgenum;//在一开始就要 memset(head,-1,sizeof(head)); edgenum=0;
int low[N],dfn[N],tarjin_time;
void add(int u,int v)
{
	node E={u,v,head[u],0};
	edge[edgenum]=E;
	head[u]=edgenum++;
}
void tarjin(int u,int pre)
{
	low[u]=d
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值