UVa1310/LA2664 One-way traffic

2024-06-06 10:20
文章标签 one traffic way uva1310 la2664

本文主要是介绍UVa1310/LA2664 One-way traffic,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

UVa1310/LA2664 One-way traffic

  • 题目链接
  • 题意
  • 分析
  • AC 代码

题目链接

   本题是2002年icpc欧洲区域赛中欧赛区的题目

题意

   某城市有一些双向道路和一些单向道路,这些道路使得连通的两路口必然双向可达。出于安全考虑,需要将尽量多的双向道路改成单向的(但仍要保持双向可达)。

分析

   先将所有道路都看成无向的,对无向图求出所有点双连通分量,对每个分量单独处理即可:
   在每个点双连通分量内,各顶点间双向可达,意味着每个点的出度和入度均非0,那么对这个分量的原始所有有向边做一个遍历可以算出每个顶点的出度入度。然后对于出度入度至少有一者为0且只有一条双向边可选的顶点先处理(此时双向边的改造结果唯一确定)。最后剩下的顶点再依次遍历时,若其出度为0,则可选首条关联无向边改向补偿出度向并对另一端的顶点更新入度即可,这时候可能入度也为0,则继续找第二条边改向。
   像这样处理后,已经保证了双向可达,但可能仍然有部分无向边没使用到,这些边任意选定一个方向即可。

AC 代码

#include <iostream>
#include <cstring>
using namespace std;#define M 2020000
#define N 2020
int g[N][N], c[N], x[M], y[M], d[M], f[M], pre[N], s[M], bn[N], bcc[N], iu[N], clk, cc, m, n, p; bool vis[M];void det(int t) {for (int i=0; i<t; ++i) {int u = bcc[i], n = 0, s = -1; iu[u] = 0;for (int j=0; j<c[u]; ++j) {int e = g[u][j], v = x[e] + y[e] - u;if (bn[v] != cc) continue;!f[e] && d[e]==2 ? (++n, s = e) : iu[u] |= f[e] ? f[e] : u==x[e] ? 1 : 2;}int k = iu[u]^3;if (k && n == 1) {int v = x[s] + y[s] - u; iu[u] = 3;if (k == 3) {f[s] = 3;} else if (k == 1) {f[s] = u == x[s] ? 1 : 2;} else {f[s] = u == y[s] ? 1 : 2;}}}for (int i=0, u; i<t; ++i) if (iu[u = bcc[i]] < 3) for (int j=0; j<c[u]; ++j) {int e = g[u][j], v = x[e] + y[e] - u;if (bn[v] != cc || f[e] || d[e] == 1) continue;if (iu[u] == 1) {f[e] = u == y[e] ? 1 : 2; iu[v] |= 1; iu[u] = 3;} else {f[e] = u == x[e] ? 1 : 2; iu[v] |= 2; iu[u] |= 1;}if (iu[u] == 3) break;}
}int dfs(int u, int fa = -1) {int low = pre[u] = ++clk;for (int i=0; i<c[u]; ++i) {int e = g[u][i], v = x[e] + y[e] - u;if (vis[e]) continue;vis[e] = true; s[p++] = e;if (!pre[v]) {int lowv = dfs(v, u); low = min(low, lowv);if (lowv >= pre[u]) {++cc; int t = 0;while (true) {int j = s[--p], a = x[j], b = y[j];if (bn[a] != cc) bn[a] = cc, bcc[t++] = a;if (bn[b] != cc) bn[b] = cc, bcc[t++] = b;if (j == e) break;}det(t);}} else if (pre[v] < pre[u] && v != fa) low = min(low, pre[v]);}return low;
}void solve() {memset(c, 0, sizeof(c)); memset(f, 0, sizeof(f));memset(pre, clk = 0, sizeof(pre)); memset(bn, cc = p = 0, sizeof(bn));for (int i=0; i<m; ++i) {cin >> x[i] >> y[i] >> d[i];g[x[i]][c[x[i]]++] = g[y[i]][c[y[i]]++] = i; vis[i] = false;}for (int u=1; u<=n; ++u) if (!pre[u]) dfs(u);for (int i=0; i<m; ++i) if (d[i] == 2) {if (f[i] == 3) {cout << x[i] << ' ' << y[i] << ' ' << 2 << endl;} else if (f[i] == 2) {cout << y[i] << ' ' << x[i] << ' ' << 1 << endl;} else cout << x[i] << ' ' << y[i] << ' ' << 1 << endl;}
}int main() {ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);while (cin >> n >> m) solve();return 0;
}

这篇关于UVa1310/LA2664 One-way traffic的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1035837

相关文章

pytorch torch.nn.functional.one_hot函数介绍

torch.nn.functional.one_hot 是 PyTorch 中用于生成独热编码(one-hot encoding)张量的函数。独热编码是一种常用的编码方式,特别适用于分类任务或对离散的类别标签进行处理。该函数将整数张量的每个元素转换为一个独热向量。 函数签名 torch.nn.functional.one_hot(tensor, num_classes=-1) 参数 t

leetcode#66. Plus One

题目 Given a non-negative integer represented as a non-empty array of digits, plus one to the integer. You may assume the integer do not contain any leading zero, except the number 0 itself. The digi

One-Shot Imitation Learning

发表时间:NIPS2017 论文链接:https://readpaper.com/pdf-annotate/note?pdfId=4557560538297540609&noteId=2424799047081637376 作者单位:Berkeley AI Research Lab, Work done while at OpenAI Yan Duan†§ , Marcin Andrychow

One-Shot Imitation Learning with Invariance Matching for Robotic Manipulation

发表时间:5 Jun 2024 论文链接:https://readpaper.com/pdf-annotate/note?pdfId=2408639872513958656&noteId=2408640378699078912 作者单位:Rutgers University Motivation:学习一个通用的policy,可以执行一组不同的操作任务,是机器人技术中一个有前途的新方向。然而,

51单片机-第十一节-DS18B20温度传感器(One_Wire单总线)

一、DS18B20温度传感器介绍: DS18B20是一种数字温度传感器。 测温范围:-55C - +125C 通信接口:1-Wire(单总线) 二、引脚及应用电路: 很简单,电源,接地,通讯接口。        三、内部结构: 总图: (1)备用电源 (2)器件地址 (3)控制器 (4)存储器 (5)存储器内部: B1,B2存储最低有效温度和最高有效温度。

Two to One——C语言提高题【7 kyu】

一、原题 链接:Training on Two to One | Codewars Take 2 strings s1 and s2 including only letters from a to z. Return a new sorted string (alphabetical ascending), the longest possible, containing distinct

If an application has more than one locale, then all the strings declared in one language should als

字符串资源多国语言版本的出错问题 假如你仅仅针对国内语言 加上这句即可 //保留中文支持resConfigs "zh"

More than one file was found with OS independent path ‘lib/arm64-v8a/libopencv_java4.so‘

解决方案: 在app下的build.gradle中加入以下代码: packagingOptions {pickFirst 'lib/arm64-v8a/libopencv_java4.so'}

one model / ensemble method /meta-algorithm 迁移学习算不算ensemble method

鉴于object detection COCO数据集的论文经常出现 single-model 也就是说,这是一个对网络的分类,呢它是什么意思,有什么特点。相对应的另一类是什么。就是下面介绍的ensemble learning。 不过比如说网络初值是用别人的网络训练好的数值,一定意义来讲是在优化空间找到一个初值,对于自己网络的结果的影响究竟有多大,也就是说,用随机初始网络得到的结果是否有不同,有多