AGC027C ABland Yard

Link
结论:如果存在一个连通块,其中每个点既能到A点又能到B点,那么答案为Yes,否则为No
那么魔改拓扑排序判环即可,如果一个点到不了AB的点我们就把它加入队列。
最后如果有剩下来的点,那么它一定是一个每个点既能到A点又能到B点的连通块。

#include<queue>
#include<cstdio>
#include<cctype>
#include<vector>
const int N=200007;
int read(){int x=0,c=getchar();while(!isdigit(c))c=getchar();while(isdigit(c))x=x*10+c-48,c=getchar();return x;}
std::vector<int>e[N];std::queue<int>q;
int n,m,ans,vis[N],deg[N][2];char col[N];
int main()
{
    n=read(),m=read(),scanf("%s",col+1);
    for(int i=1,u,v;i<=m;++i) u=read(),v=read(),e[u].push_back(v),e[v].push_back(u),++deg[u][col[v]=='B'],++deg[v][col[u]=='B'];
    for(int i=1;i<=n;++i) if(!deg[i][0]||!deg[i][1]) ++ans,q.push(i),vis[i]=1;
    for(int u;!q.empty();)
    {
    u=q.front(),q.pop();
    for(int v:e[u]) if(!vis[v]&&!--deg[v][col[u]=='B']) ++ans,q.push(v),vis[v]=1;
    }
    puts(ans==n? "No":"Yes");
}

原文链接: https://www.cnblogs.com/cjoierShiina-Mashiro/p/12274417.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    AGC027C ABland Yard

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/327798

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月1日 下午4:25
下一篇 2023年3月1日 下午4:25

相关推荐