[AGC027C]ABland Yard
Description
AGC027C
给定一张图,点有标号A或B,计算是否对于任意的一个由AB构成的字符串都在图中有对应的路径。
Solution
观察可以发现,如果有个环(不一定是简单环)是AABB的无限循环,就输出Yes,否则输出No。
UPD:对于上面那个结论,这里给出简要证明:当在这个环上任意一个A点时,可以任意的走向AB点,在任意一个B点时也是这样,那么,对于任意字符串,只需走向要求的点即可。
然鹅,话是这么说,码却没有那么好写,我一开始写了dfs找环,但是一直WA,和标程对拍也拍不出来错。所以我就换了一种思路,借用拓扑排序的思想,每次将只与一种字符相连的点删去,如果删完还剩下,那么就说明有一个AABB的环,否则就没有。
Code
拓扑排序版:
#include <cstdio>
const int N = 2e5 + 10;
const int M = 4e5 + 10;
int hd[N], nxt[M], to[M], cnt;
int deg[N][2];
int n, m;
char col[N];
int q[N], qhd, qtl, vis[N];
inline void adde(int x, int y) {
cnt++;
to[cnt] = y; nxt[cnt] = hd[x];
hd[x] = cnt;
}
int main() {
scanf("%d%d", &n, &m);
scanf("%s", col+1);
for (int i = 1, x, y; i <= m; ++i) {
scanf("%d%d", &x, &y);
adde(x, y);
adde(y, x);
deg[x][col[y] == 'B']++;
deg[y][col[x] == 'B']++;
}
for (int i = 1; i <= n; ++i) {
if (deg[i][0] == 0 || deg[i][1] == 0) vis[q[qtl++] = i] = 1;
}
while (qhd != qtl) {
int x = q[qhd++];
// printf("%d\n", x);
// vis[x] = 1;
for (int i = hd[x]; i; i = nxt[i]) if (!vis[to[i]]) {
if (--deg[to[i]][col[x] == 'B'] == 0) {
vis[to[i]] = 1;
q[qtl++] = to[i];
}
}
}
if (qtl == n) puts("No");
else puts("Yes");
}
[AGC027C]ABland Yard的更多相关文章
- AGC027 C - ABland Yard 拓扑排序
目录 题目链接 题解 代码 题目链接 AGC027 C - ABland Yard 题解 发现有解的充要条件是有一个形为AABBAABBAABB的环 此时每一个点至少与两个不同颜色的点相连 对于初始不 ...
- AtCoder Grand Contest 027 C ABland Yard
ABland Yard 思路: 用了类似拓扑排序的方法来判环 代码: #pragma GCC optimize(2) #pragma GCC optimize(3) #pragma GCC optim ...
- 【杂题总汇】AGC027 C - ABland Yard
◆AGC027◆C - ABland Yard 终于知道为什么比赛的时候这么多人做C题了…… +传送门+(这是beta版的) ◇ 题目(自己翻译的,不要在意细节……) P.S. (@ 2018-9-2 ...
- AGC 027C.ABland Yard(拓扑/二分图)
题目链接 \(Description\) 给定一张图(可能存在自环),每个点上有A或B.求是否存在一条路径,使得在上面不断走,能够得到所有AB串组合(可以重复经过点). \(n\leq2\times1 ...
- 【Atcoder】AGC027 题解
A - Candy Distribution Again 大意:有x个糖给n个小朋友,必须分完,小朋友得到糖数为一个确切值的时候小朋友会开心,求最多的开心数 题解 直接排序然后贪心分,如果分到最后一个 ...
- 【赛事总结】◇赛时·8◇ AGC-027
[赛时·8]AGC-027 日常AGC坑……还好能涨Rating +传送门+ ◇ 简单总结 感觉像打多校赛一样,应该多关注一下排名……考试的时候为了避免影响心态,管都没有管排名,就在那里死坑B题.最后 ...
- 非关系型数据库(NoSql)
最近了解了一点非关系型数据库,刚刚接触,觉得这是一个很好的方向,对于大数据 方面的处理,非关系型数据库能起到至关重要的地位.这里我主要是整理了一些前辈的经验,仅供参考. 关系型数据库的特点 1.关系型 ...
- Entity Framework 6 Recipes 2nd Edition(11-9)译 -> 在LINQ中使用规范函数
11-9. 在LINQ中使用规范函数 问题 想在一个LINQ查询中使用规范函数 解决方案 假设我们已经有一个影片租赁(MovieRental )实体,它保存某个影片什么时候租出及还回来,以及滞纳金等, ...
- 如何给你的LinuxVPS装个远程桌面
有些人抱怨Linux的系统没有桌面,用着实在是不方便.今天整理一下网上的教程,给VPS装个桌面环境.Centos系统+X Window+GNOME Desktop. 此程序会安装无数乱七八糟的东西到你 ...
随机推荐
- P1341 无序字母对【欧拉路径】- Hierholzer模板
P1341 无序字母对 提交 24.87k 通过 6.80k 时间限制 1.00s 内存限制 125.00MB 题目提供者yeszy 难度提高+/省选- 历史分数100 提交记录 查看题解 标签 福建 ...
- 用友UAP NC 单据新增时业务单元不能带出问题处理
用户需求新建一个主子表单据,由于刚从63环境升级到65环境,所以对于 65环境走单据流程生成节 点出的错误不了解. 直接建了集团级的主子表单据后,实施说需要的是业务单元级的主子表单据,跟用友开发沟通后 ...
- ES6实现图片切换特效
效果图 demo.html <!DOCTYPE html> <html lang="en"> <head> <meta charset=& ...
- Codeforces Round #596 (Div. 2)D.Power Products
题意: 给一个数组,给你一个k,找出两个数字的积可以变成xk的数对对数 解析: 当且仅当,两个数进行质因子分解后每个因子的个数都是k的倍数个就说明这是满足条件的一对,可以让每个因子个数%k用map找对 ...
- 简单的登录验证小程序_python
一.要求 输入用户名密码,验证成功之后显示欢迎信息,输错三次后锁定. 程序: #!/usr/bin/env python# _*_ coding:utf-8 _*_#Author:chenxz #将黑 ...
- grep/sed/awk命令查看指定时间段的日志
*grep命令 今天遇到研发要求查询定时任务(elastic-job)在14:00-14:40的日志,使用grep命令很方便: 命令: grep '时间' '日志文件名 ' 1.例如查询2020-02 ...
- [CF527D] Clique Problem - 贪心
数轴上有n 个点,第i 个点的坐标为xi,权值为wi.两个点i,j之间存在一条边当且仅当 abs(xi-xj)>=wi+wj. 你需要求出这张图的最大团的点数. Solution 把每个点看作以 ...
- Yaf自定义autoload以实现Model文件和Controller文件命名区分
先上图: 由于Yaf作者在设计Yaf框架目录时没有直接区分开models文件和controllers文件,所以在IDE看着会很难受,眼睛离开了编辑器就不大好区分这两个文件夹的文件.所以自己写了一个au ...
- JFinalSwagger插件
个人博客 地址:http://www.wenhaofan.com/article/20190304101839 jfinal使用swagger的极简插件 码云地址:https://gitee.com/ ...
- django学习,captcha图形验证码的使用
很多网站在登录或者注册的时候都有验证码,让你去输入. 刚好有这么一款插件,可以满足这个功能 首先,先pip install django-simple-captcha 然后再setting里添加,如 ...