<题目链接>

题目大意:

给定一个混合图,问你在能够使得图中所有点能够两两到达的情况下,尽可能多的将无向边变成有向边,输出这些无向边的变化方案。

解题分析:
这与之前做过的这道题非常类似 POJ 1515 ,不同的是,本题是混合图。总体的思路还是相同的,就是将无向边定向,但是原图中的桥一定只能是双向的,否则不可能使得所有点两两相互到达,之后就是记录一下无向边定向后的结果即可。

#include <cstdio>
#include <algorithm>
#include <cstring>
#include <iostream>
using namespace std; #define rep(i,s,t) for(int i=s;i<=t;i++)
#define clr(a,b) memset(a,b,sizeof a)
const int N = 2e3+ , M = N*N; struct Edge{ int to,nxt,fp,cur; }e[M]; //fp表示这是单向边,双向边,或者在原图中不存在,cur用来给这条边定向 int n,m,cnt,tot;
int head[N],low[N],dfn[N]; inline void init(){
cnt=tot=;
clr(dfn,);clr(head,-);clr(low,);
} inline void add(int u,int v,int flag){
e[cnt]=(Edge){v,head[u],flag,-};head[u]=cnt++;
} void Tarjan(int u,int pre){
dfn[u]=low[u]=++tot;
for(int i=head[u];~i;i=e[i].nxt){
int v=e[i].to;
if(v==pre)continue;
if(e[i].cur!=-)continue; //如果该边之前已经定过向
if(!e[i].fp)continue; //如果改边在原图中不存在
e[i].cur=,e[i^].cur=;
if(!dfn[v]){
Tarjan(v,u);
low[u]=min(low[u],low[v]);
if(low[v]>dfn[u])e[i].cur=e[i^].cur=;
}else low[u]=min(low[u],dfn[v]);
}
} int main(){
while(cin>>n>>m){
init();
rep(i,,m){
int u,v,c;scanf("%d%d%d",&u,&v,&c);
if(c==)add(u,v,),add(v,u,);
else add(u,v,),add(v,u,);
}
rep(i,,n) if(!dfn[i]){
Tarjan(i,-);
}
//只输出双向边的处理方案
for(int i=;i<cnt;i+=){
if(e[i].fp==&&e[i].cur==&&e[i^].cur==)printf("%d %d 2\n",e[i^].to,e[i].to);
else if(e[i].fp==&&e[i].cur==&&e[i^].cur==)printf("%d %d 1\n",e[i^].to,e[i].to); //e[i]边有效,所以是e[i^1].to--->e[i].to
else if(e[i].fp==&&e[i].cur==&&e[i^].cur==)printf("%d %d 1\n",e[i].to,e[i^].to);
}
}
}

POJ 1438 One-way Traffic (混合图+边双连通)的更多相关文章

  1. POJ 1637 Sightseeing tour (混合图欧拉路判定)

    Sightseeing tour Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 6986   Accepted: 2901 ...

  2. POJ 1637 Sightseeing tour(混合图欧拉回路+最大流)

    http://poj.org/problem?id=1637 题意:给出n个点和m条边,这些边有些是单向边,有些是双向边,判断是否能构成欧拉回路. 思路: 构成有向图欧拉回路的要求是入度=出度,无向图 ...

  3. poj 1438--One-way Traffic(边的双连通)

    给定一个图,并给定边,a b c(c==1||c==2) 表示ab之间有c条边 求把尽可能多的有向边定向变成强联通图. 先把图当做无向图,加边时记录是否有边,dfs的时候不要把本没有的边用到!因为这个 ...

  4. POJ 2942.Knights of the Round Table (双连通)

    简要题解: 意在判断哪些点在一个图的  奇环的双连通分量内. tarjan求出所有的点双连通分量,再用二分图染色判断每个双连通分量是否形成了奇环,记录哪些点出现在内奇环内 输出没有在奇环内的点的数目 ...

  5. 图的强连通&双连通

    http://www.cnblogs.com/wenruo/p/4989425.html 强连通 强连通是指一个有向图中任意两点v1.v2间存在v1到v2的路径及v2到v1的路径. dfs遍历一个图, ...

  6. POJ 1637 - Sightseeing tour - [最大流解决混合图欧拉回路]

    嗯,这是我上一篇文章说的那本宝典的第二题,我只想说,真TM是本宝典……做的我又痛苦又激动……(我感觉ACM的日常尽在这张表情中了) 题目链接:http://poj.org/problem?id=163 ...

  7. POJ 1637 混合图的欧拉回路判定

    题意:一张混合图,判断是否存在欧拉回路. 分析参考: 混合图(既有有向边又有无向边的图)中欧拉环.欧拉路径的判定需要借助网络流! (1)欧拉环的判定:一开始当然是判断原图的基图是否连通,若不连通则一定 ...

  8. POJ 1637 Sightseeing tour ★混合图欧拉回路

    [题目大意]混合图欧拉回路(1 <= N <= 200, 1 <= M <= 1000) [建模方法] 把该图的无向边随便定向,计算每个点的入度和出度.如果有某个点出入度之差为 ...

  9. POJ 1637 混合图欧拉回路

    先来复习一下混合图欧拉回路:给定一张含有单向边和双向边的图,使得每一点的入度出度相同. 首先对于有向边来说,它能贡献的入度出度是确定的,我们不予考虑.对于无向图,它可以通过改变方向来改变两端点的出入度 ...

随机推荐

  1. 2018-11-26-win10-UWP-Controls-by-function

    title author date CreateTime categories win10 UWP Controls by function lindexi 2018-11-26 20:0:6 +08 ...

  2. Sersync 上配置 Sersync 服务

    上面的工作做好之后呢,下面就开始正式配置我们的 Sersync 了! 我们在 Sersync 安装过程中所用到包均是从谷歌 Sersync 项目组取得的,地址: https://code.google ...

  3. CentOS7系统局域网内配置本地yum源解决cannot find a valid baseurl for repo

    一.     问题详情 因为服务器无法连接外网,所有直接用yum安装某些功能将受到影响,报错如下: Error: Cannot find a valid baseurl for repo: base ...

  4. Linux架构之Nginx 负载均衡会话保持

    案例No.50:Nginx负载均衡会话保持 前期准备环境 web01.web02 (web01.web02.db01.nfs01都要优化基本源)[root@web01 ~]# vim /etc/yum ...

  5. C++ begin()和end()

    begin(a)指向数组a的第一个元素,end(a)指向数组a最后一个元素之后的一个元素 #include <iostream> using namespace std; int main ...

  6. tar解压命令

    解压 tar –xvf file.tar //解压 tar包 tar -xzvf file.tar.gz //解压tar.gz tar -xjvf file.tar.bz2 //解压 tar.bz2 ...

  7. Baltic2014 sequence

    问题描述 输入格式 输出格式 一个整数R 样例输入 7 9 4 8 20 14 15 18 样例输出 13 数据范围 所求的Z序列为6,7,8,13,14,15,18. R=13 解析&左偏树 ...

  8. 使用 pyenv 管理 Python 版本

    http://einverne.github.io/post/2017/04/pyenv.html   Posted on 04/22/2017 by Ein Verne | View revisio ...

  9. FastDFS整合nginx模块报错

    之前在本地虚拟机用的都是5.1的版本和1.12的nginx,在服务器上尝试一下高版本的6.1 一直报错各种,例如: undeclared (first use in this function) 尝试 ...

  10. Mybatis系列之逆向工程

    前言 正式开始前需先导入mybatis-generator-core的jar包,并且准备好数据库,表,以及Mybatis Generator官网(http://www.mybatis.org/gene ...