首页 > 其他分享 >AGC027C 题解

AGC027C 题解

时间:2024-08-05 19:07:09浏览次数:6  
标签:int 题解 texttt AGC027C back cin vis push

注意到如果可以构造出所有由 \(\texttt{A}\) 和 \(\texttt{B}\) 组成的字符串,那么在图上游走的路径必须成环,并且的环上的每一个点都必须同时有一个 \(\texttt{A}\) 邻居和 \(\texttt{B}\) 邻居。

于是可以考虑把点拆分为入点和出点,相邻两个点为 \(\texttt{AA},\texttt{BB}\) 的,从入点向出点连边,否则出点向入点连边。

如果新图有环证明有解,否则无解。

这样就限制环上两个点之间一定是相同,不相同,相同,\(\cdots\) 循环,满足条件。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;

const int N = 4e5 + 5;
vector<int> e[N];
int a[N], n, m;

int vis[N];
bool dfs(int x, int fa)
{
    vis[x] = 1;
    for(int i : e[x])
    {
        if(vis[i] == 1) return 1;
        if(!vis[i] && dfs(i, x)) return 1;
    }
    vis[x] = -1;
    return 0;
}

signed main()
{
    ios::sync_with_stdio(0);cin.tie(0);
    cin >> n >> m;
    string s; cin >> s;
    for(int i = 1; i <= n; i ++) a[i] = s[i - 1] == 'B';
    for(int i = 1; i <= m; i ++)
    {
        int x, y; cin >> x >> y;
        if(a[x] != a[y]) e[x + n].push_back(y), e[y + n].push_back(x);
        else e[x].push_back(y + n), e[y].push_back(x + n);
    }
    for(int i = 1; i <= n * 2; i ++)
        if(!vis[i] && dfs(i, 0))
            return cout << "Yes\n", 0;
    cout << "No";

    return 0;
}

注意到没必要这么麻烦,因为一个点不满足同时有一个 \(\texttt{A}\) 邻居和 \(\texttt{B}\) 邻居,那么一定不在环上,所以可以删去这个点,然后更新邻居是否满足要求,是否加入队列即可。

是不是和拓扑排序很像?

按照拓扑排序的方法来写就行了。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;

const int N = 2e5 + 5;
vector<int> e[N];
int a[N], n, m;
int deg[2][N];

signed main()
{
    ios::sync_with_stdio(0);cin.tie(0);
    cin >> n >> m;
    string s; cin >> s;
    for(int i = 1; i <= n; i ++) a[i] = s[i - 1] == 'B';
    for(int i = 1; i <= m; i ++)
    {
        int x, y; cin >> x >> y;
        e[x].push_back(y), e[y].push_back(x);
        deg[a[y]][x] ++;
        deg[a[x]][y] ++;
    }
    queue<int> q;
    int cnt = 0;
    for(int i = 1; i <= n; i ++)
        if(!deg[0][i] || !deg[1][i])
            q.push(i), cnt ++;
    while(q.size())
    {
        int t = q.front(); q.pop();
        for(int i : e[t])
        {
            if(!deg[0][i] || !deg[1][i]) continue;
            if(--deg[a[t]][i] == 0) q.push(i), cnt ++;
        }
    }
    if(cnt != n) cout << "Yes", 0;
    else cout << "No";

    return 0;
}

标签:int,题解,texttt,AGC027C,back,cin,vis,push
From: https://www.cnblogs.com/adam01/p/18343863

相关文章

  • npm下载包时报错 Unexpected token ‘.‘问题解决
    项目场景:项目需要使用node18.12.0以上版本的,但是npm下载显示异常问题描述当通过nvm切换nodejs版本为16以上时,npminstall[package]报错:Unexpectedtoken'.'原因分析:提示:该问题不是npm的问题,也不是nodejs的问题,是nvm-windows的问题我是通过nvm-windows已经更新版本......
  • 《数据结构习题解析与实验指导_李冬梅,张琪编著》总结出的大纲
        下面大纲为《数据结构习题解析与实验指导_李冬梅,张琪编著》总结出的大纲,可装13学习下:          ......
  • Codeforces Round 963 (Div. 2) D题解
    CodeforcesRound963D题目描述给定两个正整数n和k以及另一个由n个整数组成的数组a。在一次操作中,可以选择a中大小为k的任意一个子数组,然后将其从数组中删除,而不改变其他元素的顺序。更正式地说,假设(l,r)是对子数组a[l],a[l+1],...,a[r]的操作,使得r-l+1......
  • leetcode200. 岛屿数量C++题解,精美图例和流程图,一题带你弄懂图的dfs遍历算法
    leetcode200.岛屿数量给你一个由‘1’(陆地)和‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。示例1:输入:grid=[[“1”,“1”,“1”,......
  • [POI2015] POD 题解
    前言题目链接:洛谷。题意简述长度为\(n\)的一串项链,每颗珠子是\(k\)种颜色之一。第\(i\)颗与第\(i-1,i+1\)颗珠子相邻,第\(n\)颗与第\(1\)颗也相邻。切两刀,把项链断成两条链。要求每种颜色的珠子只能出现在其中一条链中。求方案数量(保证至少存在一种),以及切成的两段......
  • CF1993C Light Switches 题解
    CF1993CLightSwitches题解题目大意有\(n\)盏灯,第\(i\)盏灯亮着的时间为\([a_i+bk,a_i+(b+1)k-1]\),其中\(k\)为给定常数,\(b\)为任意非负偶数。求一个最小的\(t\),使得在时间\(t\)所有灯都是亮着的。Solve令\(m=2k\),显然所有灯的开关状态以\(m\)为周期,所以我们......
  • P5086 的题解
    (一)将输入的四个数差分得到三个值,这三个值相同的两个坐标符合条件。用map存储记录这三个值的结构体,然后用vector存储下标。(二)AC代码。#include<bits/stdc++.h>#definedbdouble#definepbpush_back#definefifirst#definesesecond#definemkpmake_pair#defin......
  • [ARC118C] Coprime Set 题解
    题目传送门(洛谷)题目传送门(atcoder)Step1理解题意输入一个数nnn要求你构造一个长度为n......
  • 洛谷P10839 【MX-J2-T0】Turtle and Equations题解
    灰常简单!蒟蒻带您写代码!题目理解题目传送门题目描述给你四个正整数。现在你有一条算式。你需要判断能否在两个方框内分别填入三种运算符 之一(运算符可以重复使用),使得算式运算的结果等于。题目分析分析后我们能够发现,只要一一列举出所有能够输出的情况,剩下的输出即可......
  • 若依框架导入阿里OSS报错问题解决方案
    [INFO]ruoyi-quartz.......................................FAILURE[0.504s][INFO]ruoyi-generator....................................SKIPPED[INFO]ruoyi-admin........................................SKIPPED[INFO]---------------------------------......