不难的题。首先任意环上的边一定不是必经边,答案为B。我们随便搞一颗原图的dfs树,那么非树边,和每条飞树边覆盖的树上的链都是B。在树上打链覆盖的标记即可。
然后是对于每个x到y有路的限制,我们直接在x->lca打向上走的标记,lca->y打向下走的标记,最后判断一下就好了。

#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=200005, maxe=400005;
struct Edge{int x,y;
} Es[maxn], queB[maxn];
int n,m,Q,tmplen,tagB[maxn],tagL[maxn],tagR[maxn],ans[maxn],fa_id[maxn];
int fir[maxn],nxt[maxe],son[maxe],id[maxe],tot;
bool in_t[maxn],vis_e[maxn],vis[maxn],is_rt[maxn];
void add(int x,int y,int z){son[++tot]=y; id[tot]=z; nxt[tot]=fir[x]; fir[x]=tot;
}
void dfs1(int x){vis[x]=true;for(int j=fir[x];j;j=nxt[j]) if(!vis_e[id[j]]){vis_e[id[j]]=true;if(!vis[son[j]]) fa_id[son[j]]=id[j], in_t[id[j]]=true, dfs1(son[j]); else{ans[id[j]]='B';queB[++tmplen].x=x; queB[tmplen].y=son[j];}}
}
int dep[maxn],anc[maxn][20];
void dfs_info(int x,int pre){anc[x][0]=pre; for(int i=1;i<=18;i++) anc[x][i]=anc[anc[x][i-1]][i-1];for(int j=fir[x];j;j=nxt[j]) if(in_t[id[j]]&&son[j]!=pre) dep[son[j]]=dep[x]+1, dfs_info(son[j],x);
}
int LCA(int x,int y){if(dep[x]<dep[y]) swap(x,y);for(int i=18;i>=0;i--) if(dep[anc[x][i]]>=dep[y]) x=anc[x][i];if(x==y) return x;for(int i=18;i>=0;i--) if(anc[x][i]!=anc[y][i]) x=anc[x][i], y=anc[y][i];return anc[x][0];
}
void dfs(int x,int pre){for(int j=fir[x];j;j=nxt[j]) if(in_t[id[j]]&&son[j]!=pre){dfs(son[j],x); tagB[x]+=tagB[son[j]]; tagL[x]+=tagL[son[j]]; tagR[x]+=tagR[son[j]];}if(tagB[x]) ans[fa_id[x]]='B'; elseif(tagR[x]) ans[fa_id[x]]=Es[fa_id[x]].x==x?'R':'L'; elseif(tagL[x]) ans[fa_id[x]]=Es[fa_id[x]].y==x?'R':'L'; elseans[fa_id[x]]='B';
}
int main(){freopen("A.in","r",stdin);freopen("A.out","w",stdout);scanf("%d%d",&n,&m);for(int i=1;i<=m;i++){scanf("%d%d",&Es[i].x,&Es[i].y);add(Es[i].x,Es[i].y,i); add(Es[i].y,Es[i].x,i);}for(int i=1;i<=n;i++) if(!vis[i]) is_rt[i]=true, dfs1(i), dfs_info(i,i);for(int i=1;i<=tmplen;i++) tagB[queB[i].x]++, tagB[queB[i].y]++, tagB[LCA(queB[i].x,queB[i].y)]-=2;scanf("%d",&Q);for(int i=1;i<=Q;i++){int x,y,_lca; scanf("%d%d",&x,&y); _lca=LCA(x,y);tagR[x]++; tagR[_lca]--;tagL[y]++; tagL[_lca]--;}for(int i=1;i<=n;i++) if(is_rt[i]) dfs(i,i);for(int i=1;i<=m;i++) putchar(ans[i]);return 0;
}

[dfs树]「CEOI 2017」One-Way Streets相关推荐

  1. LOJ 2288「THUWC 2017」大葱的神力

    LOJ 2288「THUWC 2017」大葱的神力 Link Solution 比较水的提交答案题了吧 第一个点爆搜 第二个点爆搜+剪枝,我的剪枝就是先算出 \(mx[i]\) 表示选取第 \(i \ ...

  2. LOJ 2979 「THUSCH 2017」换桌——多路增广费用流

    题目:https://loj.ac/problem/2979 原来的思路: 优化连边.一看就是同一个桌子相邻座位之间连边.相邻桌子对应座位之间连边. 每个座位向它所属的桌子连边.然后每个人建一个点,向 ...

  3. 「MICCAI 2017」Reading Notes

    Sina Weibo:东莞小锋子Sexyphone Tencent E-mail:403568338@qq.com http://blog.csdn.net/dgyuanshaofeng/articl ...

  4. 「LOJ 2289」「THUWC 2017」在美妙的数学王国中畅游——LCT泰勒展开

    题目大意: 传送门 给一个动态树,每个节点上维护一个函数为$f(x)=sin(ax+b)$.$f(x)=e^{ax+b}$.$f(x)=ax+b$中的一个. 支持删边连边,修改节点上函数的操作. 每次 ...

  5. 【LOJ #2289】「THUWC 2017」在美妙的数学王国中畅游(LCT+泰勒展开)

    传送门 首先显然exe^xex和sinsinsin都不好维护整体 发现他给你了个提示 那么显然就是要用的了 那么就可以直接把eee和sinsinsin在x=0x=0x=0处 展开展开个十几项 由于有除 ...

  6. 【LOJ】#2289. 「THUWC 2017」在美妙的数学王国中畅游

    题解 我们发现,题目告诉我们这个东西就是一个lct 首先,如果只有3,问题就非常简单了,我们算出所有a的总和,所有b的总和就好了 要是1和2也是多项式就好了--其实可以!也就是下面泰勒展开的用处,我们 ...

  7. @loj - 2289@「THUWC 2017」在美妙的数学王国中畅游

    目录 @description@ @solution@ @accepted code@ @details@ @description@ n 个点编号 0 到 n-1,每个点有一个从 [0,1] 映射到 ...

  8. 「THUWC 2017」在美妙的数学王国中畅游

    这个题目很明显在暗示你要用泰勒展开. 直接套上去泰勒展开的式子,精度的话保留12项左右即可. 分别维护每一项的和,可能比较难写吧. 然后强行套一个LCT就没了. 转载于:https://www.cnb ...

  9. @loj - 2288@「THUWC 2017」大葱的神力

    目录 @description@ @solution@ @data - 1@ @data - 2@ @data - 3@ @data - 4@ @data - 5@ @data - 6@ @data ...

最新文章

  1. 堆和栈的概念和区别 python_堆和栈的区别是啥?
  2. 【APICloud系列|19】上架APPStore需要准备哪些材料?
  3. LeetCode 1676. 二叉树的最近公共祖先 IV
  4. vscode python 远程调试_vscode 远程调试python的方法
  5. 读书随笔:The Book of Why——CHAPTER 1:The Ladder of Causation
  6. git本地分支和远程分支改名
  7. EF中CodeFirst中实体变化的处理方式
  8. 第一百零八节,JavaScript,内置对象,Global对象字符串编码解码,Math对象数学公式...
  9. python 和 的区别_Python中is和==的区别
  10. jquery chosen插件的使用(搜索查询下拉列表,多选)
  11. 学习sift算法的原理和步骤_大白话人工智能算法-第32节集成学习之通俗理解XGBoost原理和过程
  12. 联想服务器ThinkServer网卡驱动程序缺失的解决办法
  13. 编写简单的WDF驱动程序
  14. 来电弹屏--线程间操作无效: 从不是创建控件的线程访问它
  15. GBase 8c 数据库产品简介
  16. 如何查看MySQL的表空间
  17. 生产管理ERP软件系统的主要功能有哪些?
  18. Tensorflow Serving源码详解
  19. PRTG网络监控软件
  20. 海康威视NVR获取网络摄像头报警信息 C++ 实现

热门文章

  1. 三次样条曲线 python实现
  2. matplotlib绘图归纳(双纵轴、柱状渐变、堆叠柱状)
  3. 华为云宝塔linux,华为云上安装宝塔面板
  4. macbook打印出现乱码解决方案
  5. 微信开发者工具如何打开企业微信小程序
  6. 手持PDA功能及优势
  7. 三年磨一剑大话数据结构——数据结构起源、概念和术语
  8. usb接上计算机没反应怎么办,u盘插上去电脑没反应怎么办 u盘插上后无任何反应的解决教程...
  9. HTML 5 音频与视频标签
  10. 校招----小米一面面经