POJ 1438 混合图定定向为强连通图 双连通

这是一篇关于解决POJ 1438问题的博客,该问题涉及图论中的强连通图和双连通组件。通过Tarjan算法找到图中的桥,定向无向边以保持强连通性。首先,将有向边视为无向边,找出并删除桥。然后,对剩下的连通块,定向无向边以确保任意两点可达。算法中区分树边和后向边,根据low[u]和dfn[u]的关系来决定边的方向。
摘要由CSDN通过智能技术生成

题意:

给定n个点 m条边 (点标从1开始)

下面m行表示边 u v k (k=1为单向,k=2为双向)

问:

把尽可能多的无向边定向使得最终图保持强连通的性质(任意两点可达)

答案保证有解。

输出所有无向边最终的情况

u v k (k = 2表示不定向 , k = 1表示定向为 u->v)

思路:

1、tarjan:由于图中既有有向边,又有无向边,那么先把有向边视为无向,用双连通求桥,直接输出桥然后删掉该边即可(因为题目保证有解,所以桥一定是无向边)

2、那么图中就只剩下一个个连通块,对于任意连通块(当前是当作边全为无向)我们必然能把所有无向边定向。因为要使得定向后依旧强连通,所以对于任意点u的low[u]值一定<=dfn[u].

1、当前遍历的是树边->若当前边是无向边:假如不满足该等式,则将边反向,若满足则无向边方向正确(定向后直接输出并删边)

2、当前遍历的是后向边-> 容易确定若为无向边就让这边成为后向边。

 

 

 

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<queue>
#include<math.h>
#include<vector>
#define N 2005
using namespace std;

int n,m;//
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值