题目分析

一道桥的题(比模板难一点吧)。

我们要在无向图中选择一些边,使得当它们变为有向边时,该图仍能连通。

与其思考选择哪些边去改变,不如考虑哪些边不可以改

很明显,在有向图中,如果桥变成了单向边,这幅图肯定不能连通(可结合桥的定义理解)。

那么我们只需要找出桥,也就是不能更改的边,并把他们输出两次(题目要求),则剩下的边就都可以改变,就输出一次即可。

代码实现

我们以 Tarjan 找桥的模板代码为基础,来写这道题。(为什么要用 Tarjan 找桥就不用再多说了吧。)

  • 概述:很简单,是桥就不能改,不是桥就改。
  • 细节:记得判重边,如果是重边直接处理下一个节点,如果不是重边且不是桥,就直接输出一遍即可。

AC 代码

#include<bits/stdc++.h>
using namespace std;const int maxn = 4005;
int T;
int n, m;
int cnt, hd[maxn];
struct node{int to, nxt;
}e[maxn * 2];
int dfn[maxn], low[maxn];
int tmp;void init ()
{cnt = tmp = 0;memset (dfn, 0, sizeof dfn);memset (low, 0, sizeof low);memset (e, 0, sizeof e);memset (hd, 0, sizeof hd);
}void add (int u, int v)
{e[++cnt].to = v;e[cnt].nxt = hd[u];hd[u] = cnt;
}void tarjan (int u, int fa)
{int jdg = 0;dfn[u] = low[u] = ++tmp;for (int i = hd[u]; i; i = e[i].nxt){int v = e[i].to;jdg = 0;if (!dfn[v]){tarjan (v, u);low[u] = min (low[u], low[v]);if (low[v] > dfn[u]){printf ("%d %d\n%d %d\n", u, v, v, u);jdg = 1;}}else if (dfn[v] < dfn[u] and v != fa) low[u] = min (low[u], dfn[v]);else continue;if (jdg == 0) printf ("%d %d\n", u, v);}
}int main ()
{int T = 0;while (1){scanf ("%d %d", &n, &m);if(!n and !m) break;init ();for (int i = m; i > 0; i--){int u, v;scanf ("%d %d", &u, &v);add (u, v), add (v, u);}cout << ++T << endl << endl;for (int i = 1; i <= n; i++){if (!dfn[i]) tarjan (i, -1);}cout << "#" << endl;}return 0;
}

UVA610 街的方向 题解相关推荐

  1. 写全武汉的火锅店..更新版 恩..欢迎补充 ^_^

    德庄:地点  在汉口三阳路有一家,608可到  在青山余家头有一个             在街道口坐702到余家头下,再往前走大概100米就到了             德庄在阅马厂有一个, 从首义 ...

  2. UVALive 3959 Rectangular Polygons (排序贪心)

    Rectangular Polygons 题目链接: http://acm.hust.edu.cn/vjudge/contest/129733#problem/G Description In thi ...

  3. 1525C - Robot Collisions

    /* 题意:n个机器人,有的往左走有的往右走, 同一时间在同一个整数点的机器人爆炸, 碰到墙改变方向 题解: 1.按位置排序 2.分奇数偶数讨论,因为奇数和偶数之间不会爆炸 3.如果一个向左的机器人, ...

  4. LeetCode Top100特训

    更新中-- 两数相加 盛水最多的容器 电话号码的字母组合 删除链表的倒数第 N 个结点 字母异位词分组 寻找两个正序数组的中位数 合并区间 不同路径(与最小路径和类似) 正则表达式匹配 颜色分类 单词 ...

  5. 云游昆大丽(一)——舟车劳顿

    清早起来,是个好天气,急着去赶8点多的飞机,匆匆忙忙坐着355就赶去了机场. 今天是8月1号,旅程的第一天.路上草草决定了本次出团的领导岗位,本人--团长,LP--副团长兼团长夫人.双重职责是为了灵活 ...

  6. 【考研408】计算机与组成原理笔记

    文章目录 计算机系统概述 计算机系统层次结构 计算机硬件的基本组成 计算机软件的分类 计算机的工作过程 计算机系统的多级层次结构 课后习题 计算机的性能指标 计算机的主要性能指标 几个专业术语 课后习 ...

  7. 今日头条2018校招测试开发方向(第一、二、三、四批)编程题汇总 - 题解

    对于今日头条这家公司来说,测试的题和后端开发的题几乎是一样的,但是由于第一批的后端开发的题没有在牛客网上放出来,因此,猜测后端开发第一批的题应该和后端开发第一批的题一样,同时也想做一个测试方向编程题的 ...

  8. UNCTF2020web方向部分题解

    文章目录 Web方向 easy_ssrf easyflask 俄罗斯方块人大战奥特曼 easyunserialize babyeval ezphp easy_upload UN's_online_to ...

  9. 美团点评2018春招后台开发方向编程题 - 题解

    美团这次的春招后端方向是两个编程题,没有考比较难的算法,如果日积月累刷题还是可以做出来的. 第一题:字符串距离 题目: 给出两个相同长度的由字符 a 和 b 构成的字符串,定义它们的距离为对应位置不同 ...

最新文章

  1. linux,ssh,ftp,server
  2. docker安装Jenkins:查看安装版本信息
  3. ruby学习笔记(2)-chomp,chop的区别
  4. mysql order by sql注入_mybatis中#{}和${}的区别及order by的sql注入问题
  5. NotificationManagerService使用详解与原理分析(一)
  6. 我做的百度飞桨PaddleOCR .NET调用库
  7. Android之mvp和mvc对比分析以及实际应用
  8. Spring Boot笔记-发送消息给RabbitMQ
  9. java 与sas交互_SAS与MACRO的交互使用
  10. mysql be_Amobe实现MySQL读写分离
  11. Delphi 2007 XE10.1 MD5加密 中文 英文 16位 32位
  12. linux自动挂载ipsan,RedhatLinux挂载IPSAN(iScsi协议)
  13. 产品经理笔试面试(题目+答案)
  14. MSDOS(MBR)与GPT磁盘分区表
  15. 【强大知名的CAD绘图工具】AutoCAD 2019 for Mac
  16. NETDMIS5.0偏置构造平面2023
  17. 实验十六:电位器传感器实验
  18. JAVA MemCache 史无前例的详细讲解 看完包精通MEMCACHE
  19. 基于深度学习的日志数据异常检测
  20. ubuntu-18.04 tenda U9安装wifi驱动

热门文章

  1. 武汉东湖高新区2021年“光谷芯锐奖”集成电路领域新锐企业评选申报流程、时间
  2. 区块链BaaS云服务(23)网易NBaaS平台
  3. sublime text3 正则替换
  4. 如何轻松应对述职专题四之问答篇
  5. JavaScript 复制浏览器地址
  6. html js鼠标悬停事件,鼠标悬停在轴标签d3.js javascript上的事件
  7. Onyx 0.9.11 发布,分布式计算系统
  8. 广东惠州市地方税务局同城异址容灾备份建设项目
  9. POJ2394 Checking an Alibi ——最短路
  10. 男装零售小程序开发,男人的在线衣橱