题意:
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