UVA610 街的方向 题解
题目分析
一道桥的题(比模板难一点吧)。
我们要在无向图中选择一些边,使得当它们变为有向边时,该图仍能连通。
与其思考选择哪些边去改变,不如考虑哪些边不可以改。
很明显,在有向图中,如果桥变成了单向边,这幅图肯定不能连通(可结合桥的定义理解)。
那么我们只需要找出桥,也就是不能更改的边,并把他们输出两次(题目要求),则剩下的边就都可以改变,就输出一次即可。
代码实现
我们以 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 街的方向 题解相关推荐
- 写全武汉的火锅店..更新版 恩..欢迎补充 ^_^
德庄:地点 在汉口三阳路有一家,608可到 在青山余家头有一个 在街道口坐702到余家头下,再往前走大概100米就到了 德庄在阅马厂有一个, 从首义 ...
- UVALive 3959 Rectangular Polygons (排序贪心)
Rectangular Polygons 题目链接: http://acm.hust.edu.cn/vjudge/contest/129733#problem/G Description In thi ...
- 1525C - Robot Collisions
/* 题意:n个机器人,有的往左走有的往右走, 同一时间在同一个整数点的机器人爆炸, 碰到墙改变方向 题解: 1.按位置排序 2.分奇数偶数讨论,因为奇数和偶数之间不会爆炸 3.如果一个向左的机器人, ...
- LeetCode Top100特训
更新中-- 两数相加 盛水最多的容器 电话号码的字母组合 删除链表的倒数第 N 个结点 字母异位词分组 寻找两个正序数组的中位数 合并区间 不同路径(与最小路径和类似) 正则表达式匹配 颜色分类 单词 ...
- 云游昆大丽(一)——舟车劳顿
清早起来,是个好天气,急着去赶8点多的飞机,匆匆忙忙坐着355就赶去了机场. 今天是8月1号,旅程的第一天.路上草草决定了本次出团的领导岗位,本人--团长,LP--副团长兼团长夫人.双重职责是为了灵活 ...
- 【考研408】计算机与组成原理笔记
文章目录 计算机系统概述 计算机系统层次结构 计算机硬件的基本组成 计算机软件的分类 计算机的工作过程 计算机系统的多级层次结构 课后习题 计算机的性能指标 计算机的主要性能指标 几个专业术语 课后习 ...
- 今日头条2018校招测试开发方向(第一、二、三、四批)编程题汇总 - 题解
对于今日头条这家公司来说,测试的题和后端开发的题几乎是一样的,但是由于第一批的后端开发的题没有在牛客网上放出来,因此,猜测后端开发第一批的题应该和后端开发第一批的题一样,同时也想做一个测试方向编程题的 ...
- UNCTF2020web方向部分题解
文章目录 Web方向 easy_ssrf easyflask 俄罗斯方块人大战奥特曼 easyunserialize babyeval ezphp easy_upload UN's_online_to ...
- 美团点评2018春招后台开发方向编程题 - 题解
美团这次的春招后端方向是两个编程题,没有考比较难的算法,如果日积月累刷题还是可以做出来的. 第一题:字符串距离 题目: 给出两个相同长度的由字符 a 和 b 构成的字符串,定义它们的距离为对应位置不同 ...
最新文章
- linux,ssh,ftp,server
- docker安装Jenkins:查看安装版本信息
- ruby学习笔记(2)-chomp,chop的区别
- mysql order by sql注入_mybatis中#{}和${}的区别及order by的sql注入问题
- NotificationManagerService使用详解与原理分析(一)
- 我做的百度飞桨PaddleOCR .NET调用库
- Android之mvp和mvc对比分析以及实际应用
- Spring Boot笔记-发送消息给RabbitMQ
- java 与sas交互_SAS与MACRO的交互使用
- mysql be_Amobe实现MySQL读写分离
- Delphi 2007 XE10.1 MD5加密 中文 英文 16位 32位
- linux自动挂载ipsan,RedhatLinux挂载IPSAN(iScsi协议)
- 产品经理笔试面试(题目+答案)
- MSDOS(MBR)与GPT磁盘分区表
- 【强大知名的CAD绘图工具】AutoCAD 2019 for Mac
- NETDMIS5.0偏置构造平面2023
- 实验十六:电位器传感器实验
- JAVA MemCache 史无前例的详细讲解 看完包精通MEMCACHE
- 基于深度学习的日志数据异常检测
- ubuntu-18.04 tenda U9安装wifi驱动
热门文章
- 武汉东湖高新区2021年“光谷芯锐奖”集成电路领域新锐企业评选申报流程、时间
- 区块链BaaS云服务(23)网易NBaaS平台
- sublime text3 正则替换
- 如何轻松应对述职专题四之问答篇
- JavaScript 复制浏览器地址
- html js鼠标悬停事件,鼠标悬停在轴标签d3.js javascript上的事件
- Onyx 0.9.11 发布,分布式计算系统
- 广东惠州市地方税务局同城异址容灾备份建设项目
- POJ2394 Checking an Alibi ——最短路
- 男装零售小程序开发,男人的在线衣橱