文章目录

  • 题意
  • 思路

传送门

题意

给你nnn个点,需要给每个点定向,方向可以向右或者向左,定向之后点会朝选择的方向移动,要求满足mmm个条件,两种不同的条件如下:

  1. i,ji,ji,j两个位置定向之后移动不会相遇。
  2. i,ji,ji,j两个位置定向之后一定会相遇。

如果不能满足输出NONONO,否则输出YESYESYES,并且给出定向之后的点的方向和位置。

思路

考虑两种情况的方向如何选择,首先他们两个位置一定选择不同的方向,让后根据是否相遇来调整他们的位置。那么根据第一个条件,我们给i,ji,ji,j连无向边,那么有解的第一个条件就比较显然了,就是这个构成的图是二分图,让后现在他们的方向确定了,接下来需要确认他们的位置,我们分两种情况来讨论分别对应题目的两种情况:

  1. 假设iii位置取LLL,jjj位置取RRR,由于他们不会相遇,那么xi<xjx_i<x_jxi​<xj​。
  2. 假设iii位置取LLL,jjj位置取RRR,由于他们会相遇,那么xi>xjx_i>x_jxi​>xj​。

看到大于号,需要跟拓扑序联系起来,那么我们就按照从小到大的位置来填,连边就按照上面的小的连大的,最终判断是否存在环即可。

复杂度O(n+m)O(n+m)O(n+m)

#include<bits/stdc++.h>
#define X first
#define Y second
#define L (u<<1)
#define R (u<<1|1)
#define Mid (tr[u].l+tr[u].r>>1)
#define pb push_back
using namespace std;const int N=1000010,INF=0x3f3f3f3f,mod=1e9+7;
typedef long long LL;int n,m;
vector<int>v[N];
bool flag;
int col[N],d[N];
int st[N];
struct Node {int x,y,z;
}p[N];
struct node {char ch;int pos;
}ans[N];void dfs(int u,int c) {col[u]=c;st[u]=0;for(auto x:v[u]) {if(col[x]) {if(col[x]==c) flag=false;continue;}dfs(x,3-c);}
}char get(int pos) {if(col[pos]==0) return 'L';if(col[pos]==1) return 'R';else return 'L';
}void solve() {flag=true;scanf("%d%d",&n,&m);for(int i=1;i<=m;i++) {int a,b,c; scanf("%d%d%d",&a,&b,&c);v[b].pb(c);v[c].pb(b);p[i]={a,b,c};}for(int i=1;i<=n;i++) if(!col[i]) dfs(i,1);if(!flag) {puts("NO");return;}for(int i=1;i<=n;i++) v[i].clear();for(int i=1;i<=m;i++) {int x,y,z;x=p[i].x,y=p[i].y,z=p[i].z;if(x==2) {if(col[y]==1) d[z]++,v[y].pb(z);else d[y]++,v[z].pb(y);} else {if(col[y]==2) d[z]++,v[y].pb(z);else d[y]++,v[z].pb(y);}}queue<int>q;int pos=0;for(int i=1;i<=n;i++) if(!d[i]) q.push(i);while(q.size()) {int u=q.front(); q.pop();ans[u]={get(u),pos++};for(auto x:v[u]) {if(--d[x]==0) {q.push(x);}}}for(int i=1;i<=n;i++) if(d[i]) {puts("NO");return;}puts("YES");for(int i=1;i<=n;i++) {printf("%c %d\n",ans[i].ch,ans[i].pos);}
}int main() {int _=1;while(_--) {solve();}return 0;
}

CF 1635E Cars 二分图 + 拓扑相关推荐

  1. Codeforces 1635 E. Cars 二分图+拓扑排序

    link 题意: 坐标轴有两辆车 1第一种相向而行 2 第二种相背而行 先二分图跑出来他的方向 如果不符合直接no 再根据他的拓扑关系跑一边拓扑排序 (开了ios)输出就乱码!!!!这就是cf吧 #i ...

  2. 【Codeforces】1635E Cars 题解

    题目大意 有nnn辆车在xxx轴整数上,它们要么向左要么向右行驶. 题目会给出mmm条关系: 1,x,y1,x,y1,x,y: 表示x,yx,yx,y这两辆车无论速度如何,不可能相遇 2,x,y2,x ...

  3. Codeforces Round #772 (Div. 2) CF1635ABCDEF

    1635A - Min Or Sum 回忆性题意:改变两个数,但 或 不能变,求整个数组最小和. 挺好想的,只要抓住或运算有一位就够了,并且答案的构造非常可行,就可以解决了. 答案证明给出了一个式子a ...

  4. Leetcode 部分题解

    算法思想 双指针 排序 快速选择 堆排序 桶排序 荷兰国旗问题 贪心思想 二分查找 分治 搜索 BFS DFS Backtracking 动态规划 斐波那契数列 矩阵路径 数组区间 分割整数 最长递增 ...

  5. 神了,无意中发现一位1500道的2021LeetCode算法刷题pdf笔记

    昨晚逛GitHub,无意中看到一位大佬的算法刷题笔记,感觉发现了宝藏!有些小伙伴可能已经发现了,但咱这里还是忍不住安利一波,怕有些小伙伴没有看到. 关于算法刷题的困惑和疑问也经常听朋友们提及.这份笔记 ...

  6. 靠二进制画几何[图论]

    @Kaike 今天来浅谈一下图,听说自己写总结的人grade++,rp++. 像我这样可爱的人怎么能错过这个机会呢嘤嘤嘤. 毕竟图至少啃了15day++. 恩曾经的小弱渣从来都是仰望高端玩家虐图论 听 ...

  7. 给广大码农分享福利:一个业界良心的github仓库,中文计算机资料

    我今天查资料时无意发现的,https://github.com/CyC2018/CS-Notes 这个仓库包含了下列几个维度的计算机学习资料: 深受国内程序员喜爱,已经有超过3万多star了. 1. ...

  8. codeforces 1635E-Cars (二分图染色+拓扑排序)

    传送门 difficult:2200difficult:2200difficult:2200 题意 数轴上存在 nnn 辆车和 mmm 个限制,每个限制以 opopop.uuu.vvv 的形式表示,其 ...

  9. CF 277.5 B.BerSU Ball 二分图的最大匹配 模版题

    题意:求二分图的最大匹配数量 模版如下: //二分图匹配(匈牙利算法的DFS实现) //初始化:g[][]两边顶点的划分情况 //建立g[i][j]表示i->j的有向边就可以了,是左边向右边的匹 ...

最新文章

  1. 雷军这个程序员!真的牛逼!
  2. 爬虫请求库 requests
  3. 【BZOJ-1458】士兵占领 最大流
  4. 入门:现实世界中的推荐系统(术语、技术等)
  5. 连续四年百度Android岗必问面试题!Android校招面试指南
  6. c#在当前窗体的按钮事件调用另一封…
  7. 计算机视觉实战(十四)答题卡识别 (附完整代码)
  8. VUE2.0 测试环境配置
  9. RTCM3消息类型介绍
  10. html5 下拉按钮样式修改,css和jquery实现的select美化自定义下拉框样式
  11. 2022 年面向开发人员的七个优秀 Java IDE
  12. 统一社会信用代码校验-JavaScript
  13. PHP实现给图片加文字水印
  14. 腾讯企业邮箱开发(非官方开发文档方式
  15. 【数据库】数据库恢复技术
  16. el-tree 改变label
  17. MFC-ProgressControl(进度条)
  18. (亲测可用)html5 file调用手机摄像头
  19. 程序员推荐的最简单有效的科学健脑…
  20. 电脑 cmd 输入 python,跳转到商城,解决办法

热门文章

  1. python桌面程序开发_程序员之路:python3+PyQt5+pycharm桌面GUI开发
  2. mysql安装10045_mysql数据库5.6.45安装后的配置(离线安装包版)
  3. win7升级win10正式版_win7告退在即,如何升级到win10?
  4. 你发现了吗?数学还能这么美
  5. 福利来袭,送你105例C语言实战
  6. html、css、js注释,js,html,css注释大集合
  7. 数据库 流量切分_互联网大厂有哪些分库分表的思路和技巧?
  8. promise的状态以及api介绍_前端 api 请求缓存
  9. 短文件名漏洞如何修复_短文件名漏洞修复
  10. 重力模型matlab代码,STK基础教程.doc