题目大意

有nnn辆车在xxx轴整数上,它们要么向左要么向右行驶。
题目会给出mmm条关系:

  • 1,x,y1,x,y1,x,y: 表示x,yx,yx,y这两辆车无论速度如何,不可能相遇
  • 2,x,y2,x,y2,x,y: 表示x,yx,yx,y这两辆车在某些特定速度下,有可能相遇

题目链接

2≤n≤2∗105,2≤m≤2∗1052 \le n \le 2 * 10^5,2 \le m \le 2 * 10^52≤n≤2∗105,2≤m≤2∗105
若可以满足,给出每个汽车的坐标和移动方向。

思路

关系1,21,21,2都意味着两辆车的移动方向相反

  • 关系111:两辆车相向而行
  • 关系222:两辆车相背而行

所以我们先用二分图来判定是否可以把所有车的方向确定下来。

如果在1,x,y1,x,y1,x,y中xxx向左行驶,那么yyy就向右行驶,且xxx在yyy的左边,那么我们就在新的图中建立一条边x→yx \rightarrow yx→y。其它情况可以类比这种操作。

如何判断关系能否被满足?只需在新的图中跑一遍拓扑排序拓扑排序拓扑排序即可!

代码

#include <cstdio>
#include <iostream>
#include <vector>
#include <queue>
using namespace std;const int maxN = 2e5 + 7;int n, m, color[maxN], vis[maxN], d[maxN], ind[maxN];
vector<int> e[maxN], G[maxN];
bool succ;struct op {int op, x, y;
}a[maxN];void dfs(int x, int col)
{if(!succ)return ;color[x] = col; vis[x] = 1;for(int i = 0; i < e[x].size(); ++i) {int y = e[x][i];if(vis[y] && color[y] == col) {succ = false;return ;}else if(vis[y])continue;dfs(y, col ^ 1);}
}int main()
{scanf("%d%d", &n, &m);for(int i = 1; i <= m; ++i) {scanf("%d%d%d", &a[i].op, &a[i].x, &a[i].y);e[a[i].x].push_back(a[i].y);e[a[i].y].push_back(a[i].x);}succ = true;for(int i = 1; i <= n; ++i) {if(!succ)break;if(!vis[i])dfs(i, 1);}if(!succ) {printf("NO\n");return 0;}for(int i =1; i <= m; ++i) {if(a[i].op == 1) {if(color[a[i].x] == 1)G[a[i].x].push_back(a[i].y), d[a[i].y]++;else G[a[i].y].push_back(a[i].x), d[a[i].x]++;}else {if(color[a[i].x] == 1)G[a[i].y].push_back(a[i].x), d[a[i].x]++;elseG[a[i].x].push_back(a[i].y), d[a[i].y]++;}}queue<int> q;int cnt = 0;for(int i = 1; i <= n; ++i)if(d[i] == 0)q.push(i);while(!q.empty()) {int x = q.front(); q.pop();ind[x] = ++cnt;for(int i = 0; i < G[x].size(); ++i) {int y = G[x][i];d[y]--;if(d[y] == 0)q.push(y);}}if(cnt != n)printf("NO\n");else {printf("YES\n");for(int i = 1; i <= n; ++i) printf("%c %d\n", color[i] == 1? 'L' : 'R', ind[i]);}return 0;
}

【Codeforces】1635E Cars 题解相关推荐

  1. c语言1106回文数,Codeforces 1106 简要题解

    A题 传送门 读错题还能过样例我给自己点个赞. 题意简述:给一个010101网格SSS,问满足Si,j=Si+1,j+1=Si+1,j−1=Si−1,j−1=Si−1,j+1S_{i,j}=S_{i+ ...

  2. Educational Codeforces Round 95题解

    Educational Codeforces Round 95题解 题目链接 代码链接 A. Buying Torches 题目大意: 你手上现在有一个木棍.有以下两种交换方式: 1.用一个木棍交换x ...

  3. 【Codeforces div3-498】题解

    Codeforces div3-498题解 A. Adjacent Replacements 对于这道题目就比较简单了,如果该数N为奇数,那么经过变换之后不变,如果该数为偶数则变为N - 1 #inc ...

  4. Codeforces 1110 简要题解

    文章目录 A题 B题 C题 D题 E题 F题 G题 传送门 众所周知ldxoildxoildxoi这种菜鸡选手是不会写HHH题的,因此该篇博客只有AAA题至GGG题的题解,实在抱歉. A题 传送门 题 ...

  5. codeforces 891E Lust 题解

    题目传送门 题目大意: 给出一个长度为 nnn 的序列,进行 kkk 次操作,每次随机选取一个 aia_iai​,让答案加上 aaa 序列中的其他数的乘积,然后让 ai−1a_i-1ai​−1,问最后 ...

  6. codeforces round #827题解(完整)

    Problem - A - Codeforces 大致意思就是说给定三个数,判断是否存在一个数是另外两个数之和. #include<bits/stdc++.h> using namespa ...

  7. Codeforces 967 C 题解报告

    一.题目 http://codeforces.com/contest/967/problem/C 二.思路 (一)如果是同一楼层,则直接走过去,不用爬楼梯也不用乘电梯. (二)如果是不同楼层,分别计算 ...

  8. Codeforces 25E Test 题解

    题目传送门 题意 给你三个字符串,问最短同时以这三个字符串为子串的字符串的长度是多少. s 1 , s 2 , s 3 ≤ 1 0 5 s1,s2,s3≤10^{5} s1,s2,s3≤105 题解 ...

  9. Codeforces ECR50 div2题解

    A:签到 #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> # ...

最新文章

  1. android listview edittext 焦点冲突,Android开发之ListView+EditText-要命的焦点和软键盘问题解决办法...
  2. 《预训练周刊》第12期:无注意力变换器、借蛋白质语言模型论进化速度
  3. Linux动态频率调节系统CPUFreq之一:概述【转】-- 非常好的博客
  4. 让你的英语口语妙语连珠的句子
  5. python编程头文件_python头文件怎么写
  6. Linux Ubuntu 安装编译Opencv 3.4.3 C++开发环境
  7. 真不好意思,关于小猪妹(妖精)的
  8. Redis学习笔记三:Redis的数据类型
  9. SRL——无人机区域定位系统
  10. 利用python自动发邮件
  11. GAN 生成mnist数据
  12. 官服好吗_【知否的唯美手绘图】看到齐衡身穿“官服”时,网友:好帅啊!
  13. 免费MD5破解、在线查询网站
  14. 微信小程序发布流程(上传审核)
  15. matlab 生成噪声信号
  16. 路飞学城Python-Day8
  17. pl330 dmac驱动分析1--数据结构
  18. jzoj5234. 【NOIP2017模拟8.7A组】外星人的路径
  19. 常用搜索引擎使用技巧
  20. golang gorilla websocket例子

热门文章

  1. 如何对CAD绘图区域进行设置?
  2. linux 的一些脑洞操作
  3. 北斗导航 | 北斗/GNSS精密定位:从PPP-RTK 到 Vision-PPP(第十一届中国卫星导航年会报告)
  4. [转]程序员收集整理的PHP资源大全,包含各种类库及框架等
  5. OpenLayer学习之style样式的学习笔记
  6. 直播平台开发时iOS 开发内购功能,直播平台源码搭建
  7. uboot环境下mmc操作_uboot mmc命令详解
  8. 网络安全专家齐成岳:如何隐蔽你的C2
  9. IntelliJ IDEA -2017.3.2(Ultimate Edition)的激活方式
  10. 卡巴斯基在桌面窗口管理器中发现零日漏洞