AGC 027C.ABland Yard(拓扑/二分图)
\(Description\)
给定一张图(可能存在自环),每个点上有A或B。求是否存在一条路径,使得在上面不断走,能够得到所有AB串组合(可以重复经过点)。
\(n\leq2\times10^5,m\leq2\times10^5\)。
\(Solution\)
对于一个点,如果它的后继只有A或B(或者没有后继),显然它不能在这条路径上。
\(Sol 1\)
我们把这样的点删掉。然后再判断连向它的点是否要被删掉...这样一直删,判断最后是否存在未被删掉的点。
和拓扑排序差不多。
\(Sol 2\)
由上面的结论也可以看出,路径只能是AABB这样的环(或者AABBAABB...)(这样每个点就存在两种转移)。
AA,AB,BB,BA,这样的环我们可以通过二分图找,即对于相同字符连一条S->T的边,不同字符连一条T->S的边,最后判环。
拓扑做法:
//35ms 6656KB
#include <cstdio>
#include <cctype>
#include <algorithm>
#define gc() getchar()
const int N=2e5+5;
int Enum,H[N],nxt[N<<1],to[N<<1],t,q[N],cnt[N][2];
char s[N];
bool del[N];
inline int read()
{
int now=0;register char c=gc();
for(;!isdigit(c);c=gc());
for(;isdigit(c);now=now*10+c-'0',c=gc());
return now;
}
inline void AE(int u,int v)
{
++cnt[u][s[v]-'A'], to[++Enum]=v, nxt[Enum]=H[u], H[u]=Enum;
++cnt[v][s[u]-'A'], to[++Enum]=u, nxt[Enum]=H[v], H[v]=Enum;
}
void Del(int x)
{
if(del[x]||(cnt[x][0]&&cnt[x][1])) return;
q[++t]=x, del[x]=1;
}
int main()
{
int n=read(),m=read(); scanf("%s",s+1);
while(m--) AE(read(),read());
for(int i=1; i<=n; ++i) Del(i);
for(int h=1; h<=t; ++h)
{
int x=q[h];
for(int i=H[x]; i; i=nxt[i]) --cnt[to[i]][s[x]-'A'],Del(to[i]);
}
puts(t==n?"No":"Yes");
return 0;
}
二分图判环做法:
//30ms 10496KB
#include <cstdio>
#include <cctype>
#include <cstdlib>
#define gc() getchar()
const int N=4e5+5;
int Enum,H[N],nxt[N],to[N],vis[N];
char s[N>>1];
inline int read()
{
int now=0;register char c=gc();
for(;!isdigit(c);c=gc());
for(;isdigit(c);now=now*10+c-'0',c=gc());
return now;
}
inline void AE(int u,int v)
{
to[++Enum]=v, nxt[Enum]=H[u], H[u]=Enum;
}
void DFS(int x)
{
vis[x]=1;
for(int i=H[x],v; i; i=nxt[i])
if(!vis[v=to[i]]) DFS(v);
else if(vis[v]==1) {puts("Yes"); exit(0);}
vis[x]=-1;
}
int main()
{
int n=read(),m=read(); scanf("%s",s+1);
for(int u,v; m--; )
{
u=read(),v=read();
s[u]==s[v]?(AE(u,v+n),AE(v,u+n)):(AE(u+n,v),AE(v+n,u));
}
for(int i=1; i<=n; ++i) if(!vis[i]) DFS(i);
puts("No");
return 0;
}
AGC 027C.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 ...
- [AGC027C]ABland Yard
Description AGC027C 给定一张图,点有标号A或B,计算是否对于任意的一个由AB构成的字符串都在图中有对应的路径. Solution 观察可以发现,如果有个环(不一定是简单环)是AAB ...
- 【赛事总结】◇赛时·8◇ AGC-027
[赛时·8]AGC-027 日常AGC坑……还好能涨Rating +传送门+ ◇ 简单总结 感觉像打多校赛一样,应该多关注一下排名……考试的时候为了避免影响心态,管都没有管排名,就在那里死坑B题.最后 ...
- 【Atcoder】AGC027 题解
A - Candy Distribution Again 大意:有x个糖给n个小朋友,必须分完,小朋友得到糖数为一个确切值的时候小朋友会开心,求最多的开心数 题解 直接排序然后贪心分,如果分到最后一个 ...
- [ARC083F] Collecting Balls [建二分图+环套树定向+建拓扑图+树的拓扑序计数]
题面 [传送门](https://arc083.contest.atcoder.jp/tasks/arc083_d) 思路 这是一道真正的好题 第一步:转化模型 行列支配类的问题,常见做法就是把行和列 ...
- AGC 005D.~K Perm Counting(容斥 DP 二分图)
题目链接 \(Description\) 给定\(n,k\),求 满足对于所有\(i\),\(|a_i-i|\neq k\)的排列的个数. \(2\leq n\leq 2000,\quad 1\leq ...
- RE:从零开始的AGC被虐(到)生活(不能自理)
RE:从零开始的AGC被虐(到)生活(不能自理) 「一直注视着你,似近似远,总是触碰不到.」 --来自风平浪静的明天 AtCoder Grand Contest 001 B: Mysterious L ...
随机推荐
- ubuntu 里切换 gcc,g++ 的版本
https://askubuntu.com/questions/26498/choose-gcc-and-g-version https://stackoverflow.com/questions/7 ...
- V$SQLAREA
1.查看消耗资源最多的SQL: SELECT hash_value, executions, buffer_gets, disk_reads, parse_calls FROM V$SQLAREA W ...
- VS C# xamarin 开发android 调试正常 发布分发后运行闪退出错
我强烈推荐大家如果不是很有必要就不要引用一些.NET STD的库,比如json库newtonsoft.JSON,直接引用官方的system.Json就足够了,否则会导致体积变得巨大 好了废话不多说,这 ...
- 超级wifi
超级wifi (super wi-fi)是相对于现有的wifi提出的改进版,执行响应的 802.11af标准. 802.11af 标准是2014年2月提出的,它的主要特点是"建议在电视频率之 ...
- jquery load加载页面内ajax返回的div不能响应页面js的问题的解决方案
1. 前言 由于项目需要,需要load一个页面并保持ajax返回的div能响应其页面内的JS的click事件.这个不是 解决用jquery load加载页面到div时,不执行页面js的问题 这类问题, ...
- linux unzip 中文乱码解决方法
引自:https://blog.csdn.net/abyjun/article/details/48344379 unzip -O CP936 xxx.zip (用GBK, GB18030也可以)
- MVC,MVP和MVVM的区别
MVC 转载标名出处 dub 从这幅图可以看到,我们可以看到在MVC里,View是可以直接访问Model的!从而,View里会包含Model信息,不可避免的还要包括一些业务逻辑. 在MVC模型 ...
- Redis Windows上下载安装
其它的默认就可. public class RedisTest { public static void main(String[] args) { Jedis jedis = RedisPool.g ...
- PHP获取文件大小的方法详解
对于初入门的PHP新手来说,PHP获取文件大小这个功能实现,或许有一定的难度.但是相信新手小白们在看过本篇文章介绍后,一定能轻松掌握PHP获取文件大小的重要知识! 下面我们通过具体的代码示例,为大家详 ...
- Java 变量、循环、判断
粗糙笔记不喜勿喷 Java 8大基本类型 第一类:逻辑型(boolean) 1.boolean类型只存在true(真),false(假)两种形式 例: boolean a=true; boolean ...