UVA610 Street Directions
时间:2021-08-08
本文章向大家介绍UVA610 Street Directions,主要包括UVA610 Street Directions使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
题目大意
给出一个无向连通图,让你改造成一个有向图,并保证强连通。
解题思路
先思考,将无向图改成有向图,需要顾及到一些割边,因为把割边删掉后,原图就不联通了,所以改造后的有向图需要完整的保留割边。
而对于不是割边的边,我们只需要保留一条边,可以在 tarjan
时,记录下来。
需要注意的:多测不清空,亲人两行泪。
AC CODE
#include<bits/stdc++.h>
using namespace std;
struct Fastio
{
template <typename T>
inline Fastio operator>>(T &x)
{
x = 0;
char c = getchar();
while (c < '0' || c > '9')
c = getchar();
while (c >= '0' && c <= '9')
x = (x << 3) + (x << 1) + (c ^ 48), c = getchar();
return *this;
}
inline Fastio &operator<<(const char *str)
{
int cur = 0;
while (str[cur])
putchar(str[cur++]);
return *this;
}
template <typename T>
inline Fastio &operator<<(T x)
{
if (x == 0)
{
putchar('0');
return *this;
}
if (x < 0)
putchar('-'), x = -x;
static int sta[45];
int top = 0;
while (x)
sta[++top] = x % 10, x /= 10;
while (top)
putchar(sta[top] + '0'), --top;
return *this;
}
} io;
#define _ 20005
int n, m, opt;
int tot = 1, head[_], from[_ << 1], to[_ << 1], nxt[_ << 1];
int dol[_];
int cnt_node, cntn, low[_], dfn[_], id[_], vis[_ << 1];
stack<int> s;
int u[_], v[_];
int js(int x)
{
return (x % 2) ? x + 1 : x - 1;
}
void add(int u, int v)
{
from[++tot] = u;
to[tot] = v;
nxt[tot] = head[u];
head[u] = tot;
}
void tarjan(int u, int fa)
{
low[u] = dfn[u] = ++cnt_node;
s.push(u);
for(int i = head[u]; i; i = nxt[i])
if(vis[i] == -1)
{
if(to[i] == fa) continue;
vis[i] = 1;
vis[i ^ 1] = 0;
if(!dfn[to[i]])
{
tarjan(to[i], u);
low[u] = min(low[u], low[to[i]]);
if(low[to[i]] > dfn[u]) vis[i ^ 1] = 1;
}
else low[u] = min(low[u], dfn[to[i]]);
}
}
void init()
{
tot = 1;
cntn = 0;
cnt_node = 0;
memset(dfn, 0, sizeof dfn);
memset(low, 0, sizeof low);
memset(id, 0, sizeof id);
while(!s.empty()) s.pop();
memset(u, 0, sizeof u);
memset(v, 0, sizeof v);
memset(head, 0, sizeof head);
memset(vis, -1, sizeof vis);
}
signed main()
{
while(1)
{
io >> n >> m;
if(!n && !m) break;
init();
for(int i = 1; i <= m; ++i)
{
io >> u[i] >> v[i];
add(u[i], v[i]);
add(v[i], u[i]);
}
io << ++opt << "\n" << "\n";
for(int i = 1; i <= n; ++i)
if(!dfn[i]) tarjan(i, 0);
for(int i = 2; i <= tot; ++i)
{
if(vis[i])
{
io << from[i] << " " << to[i] << "\n";
}
}
io << "#" << "\n";
}
return 0;
}
原文地址:https://www.cnblogs.com/orzz/p/15115439.html
- Flash/Flex学习笔记(50):3D线条与填充
- LVM常规操作记录梳理(扩容/缩容/快照等)
- Flash/Flex学习笔记(55):背面剔除与 3D 灯光
- 资源等待类型sys.dm_os_wait_stats
- NVIDIA不再允许数据中心用GeForce驱动,提供区块链服务除外
- 非常强悍并实用的双机热备+负载均衡线上方案
- Apache 压力测试工具ab
- SQL之收集SQL Server线程等待信息
- 聚合索引(clustered index) / 非聚合索引(nonclustered index)
- 域名资讯:单词域名can.com以15.5万美金成功交易
- jQuery无缝图片横向(水平)/竖向(垂直)滚动
- Centos下MooseFS(MFS)分布式存储共享环境部署记录
- MFS+Keepalived双机高可用热备方案操作记录
- Docker容器学习梳理-容器时间跟宿主机时间同步
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- django-URL匹配(二)
- opengl-球体的绘制
- 【python-leetcode46-子集】全排列
- 【python-leetcode784-子集】字母大小写全排列
- 悬挂引用是如何被Rust消灭的?
- python小例子(二)
- 面试题系列第1篇:说说==和equals的区别?你的回答可能是错误的
- django-URL转换器(四)
- 【猫狗数据集】加载保存的模型进行测试
- 【猫狗数据集】划分验证集并边训练边验证
- 【猫狗数据集】使用学习率衰减策略并边训练边测试
- 面试题系列第2篇:new String()创建几个对象?有你不知道的
- spring之整合struts2
- django-URL之include函数(五)
- springmvc之使用ModelAttribute避免不允许被修改的值更新时为空