当前位置: 首页 > news >正文

题解:CF1635E Cars

首先,对于两辆车而言,注定相遇就是相向而驰,注定不相遇就是背道而驰,没有关系的两辆车就是同向的。如果一辆车既向左开,又向右开,那么这种情况一定无解,输出 NO。我们就可以用二分图染色的方法来判断它。然后方向确定了,我们还要考虑位置的问题。我们设第 \(i\) 辆车的方向为右,第 \(j\) 辆车的方向为左。如果这两辆车注定相遇,则第 \(i\) 辆车的初始位置要小于第 \(j\) 辆车的初始位置。如果这两辆车注定不相遇,则第 \(i\) 辆车的初始位置要大于第 \(j\) 辆车的初始位置。在二分图染色的过程中,我们可以对于一种颜色的汽车,将它们设为同一种方向。如果这些汽车的位置依赖关系存在环,则这种情况也一定无解,输出 NO。所以我们就可以进行拓扑排序来判断是否有环,同时为每辆车赋上初始位置。然后输出即可。

下面是代码环节:

#include<bits/stdc++.h>
using namespace std;
struct Node {int op, x, y;
} a[200005];
int n, m, color[200005], ans[200005], num[200005];
bool flag;
queue<int> q;
vector<int> v1[200005];
vector<pair<int, int>> v[200005];
void dfs(int u, int father) {for (auto i : v[u]) {if (i.first != father) {if (!color[i.first]) {color[i.first] = 3 - color[u];dfs(i.first, u);} else if (color[i.first] != 3 - color[u]) {flag = true;}}}
}
signed main() {ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);cin >> n >> m;for (int i = 1; i <= m; i ++) {cin >> a[i].op >> a[i].x >> a[i].y;v[a[i].x].push_back({a[i].y, a[i].op});v[a[i].y].push_back({a[i].x, a[i].op});}for (int i = 1; i <= n; i ++) {if (!color[i]) {color[i] = 1;dfs(i, i);}}if (flag) {cout << "NO";return 0;}for (int i = 1; i <= m; i ++) {if (a[i].op == 1) {if (color[a[i].x] == 1) {v1[a[i].x].push_back(a[i].y);num[a[i].y] ++;} else {v1[a[i].y].push_back(a[i].x);num[a[i].x] ++;}} else if (a[i].op == 2) {if (color[a[i].x] == 1) {v1[a[i].y].push_back(a[i].x);num[a[i].x] ++;} else {v1[a[i].x].push_back(a[i].y);num[a[i].y] ++;}}}for (int i = 1; i <= n; i ++) {if (num[i] == 0) {q.push(i);}}int cnt = 0;while (!q.empty()) {int u = q.front();q.pop();ans[u] = ++cnt;for (auto i : v1[u]) {num[i] --;if (num[i] == 0) {q.push(i);}}}for (int i = 1; i <= n; i ++) {if (ans[i] == 0) {cout << "NO";return 0;}}cout << "YES\n";for (int i = 1; i <= n; i ++) {if (color[i] == 1) {cout << "L " << ans[i] << "\n";} else {cout << "R " << ans[i] << "\n";}}return 0;
}
http://www.jsqmd.com/news/744286/

相关文章:

  • 2026年收藏10款主流论文降AI工具(含免费降AI率版) - 降AI实验室
  • 从零构建记忆增强系统:基于间隔重复与知识图谱的实践
  • 如何在 Taotoken 平台查看与管理您的 token 使用量与账单明细
  • PTA天梯赛L1-064:手把手教你用C++写一个‘估值一亿’的AI对话程序(附完整代码)
  • LinkSwift网盘直链下载助手:告别下载限速的八大网盘全能解决方案
  • 5步搞定音乐元数据混乱:163MusicLyrics智能整理全攻略
  • C++ SFML实现像素小猫光标追踪:从精灵动画到游戏循环实践
  • 【工业级Python轻量化落地白皮书】:覆盖PyTorch/TensorFlow/Keras三大框架,含实测吞吐量、精度衰减率与内存占用对比表(2024Q2最新基准)
  • 观察大模型API在高峰时段的响应成功率变化
  • 六西格玛证书可以挂靠吗? - 众智商学院官方
  • 题解:P11642 【MX-X8-T1】「TAOI-3」幸运草
  • ClawLock插件系统开发指南:从架构解析到实战应用
  • Verilog调试实战:用force和release快速定位FPGA仿真中的‘幽灵信号’
  • AppleRa1n终极指南:3分钟学会iOS设备激活锁绕过
  • 接口自测-1777696985
  • 告别局域网限制:手把手教你用KKPrinter源码搭建跨网段远程打印服务(Win10/11实测)
  • 使用Taotoken调用Codex模型的实际延迟与稳定性体验分享
  • 本地部署内部即时聊天IM软件选型:企业容易忽略的5个判断误区 - 小天互连即时通讯
  • 开源威胁情报自动化响应框架:从原理到实战部署指南
  • YOLOv11 改进 - 即插即用 中小目标检测飙升:Hyper 超图赋能YOLO:轻量级设计实现跨层级信息交互,增强复杂场景感知
  • Go语言微信机器人开发实战:从事件驱动架构到智能对话集成
  • OpenMemory:超越RAG的认知记忆引擎,为AI应用构建持久化智能记忆
  • nSkinz皮肤修改器:CS:GO武器皮肤免费自定义终极指南
  • 别再只画箱图了!用R的ggpubr玩转α多样性差异分析:Wilcoxon检验与高级可视化技巧
  • ComfyUI-Impact-Pack终极指南:5个核心功能彻底改变AI图像处理体验
  • 【国家放射诊疗质控标准对标版】:Python影像调试必须验证的12项DICOM一致性参数
  • 郑州黄金上门回收天花板!2026 闭眼选 福正美黄金回收 - 福正美黄金回收
  • YOLOv11 改进 - 基础知识 YOLOv11核心模块解析:C3k2的工作原理与代码实现详解(初学者指南)
  • EasyReport:基于SQL驱动的Java报表架构设计与微服务集成方案
  • 保姆级避坑指南:用STM32H5和CUBEAI 7.1部署MPU6050人体活动识别模型(附完整代码)