P10298 [CCC 2024 S4] Painting Roads(dfs给边染色)

P10298 [CCC 2024 S4] Painting Roads - 洛谷 | 计算机科学教育新生态

思路: 因为一条路径上的相邻两条边颜色得不同,所以我们可以通过深搜根据搜到的层数奇偶性来染色,没染色的就是灰色,同时对搜过的点进行标记,由于道路可能不是联通的,所以我们需要遍历每一个点,如果该点没有搜过就进行dfs。

Code:

cpp 复制代码
constexpr int N=2e5+5,mod=1e9+7;
#define fi first
#define se second

int n,m;
vector<PII> e[N];
bool st[N];
int color[N];

void dfs(int u,int c)
{
   st[u]=true;
   for(auto [v,id]:e[u])
   {
    if(st[v]) continue;
    color[id]=c%2;
    dfs(v,c+1);
   }
    
}
void solve()
{
   cin>>n>>m;
   for(int i=1;i<=m;i++)
   {
    color[i]=-1;
     int a,b;cin>>a>>b;
     e[a].push_back({b,i});
     e[b].push_back({a,i});
   }

   for(int i=1;i<=n;i++)
   {
    if(!st[i])
    {
        dfs(i,0);
    }
   }

   for(int i=1;i<=m;i++)
   {
       if(color[i]==0)
       {
         cout<<"B";
       }
       else if(color[i]==1) cout<<"R";
       else cout<<"G";
   }

}
相关推荐
十五年专注C++开发39 分钟前
CMake基础:条件判断详解
c++·跨平台·cmake·自动化编译
森焱森1 小时前
水下航行器外形分类详解
c语言·单片机·算法·架构·无人机
QuantumStack3 小时前
【C++ 真题】P1104 生日
开发语言·c++·算法
天若有情6733 小时前
01_软件卓越之道:功能性与需求满足
c++·软件工程·软件
whoarethenext3 小时前
使用 C++/OpenCV 和 MFCC 构建双重认证智能门禁系统
开发语言·c++·opencv·mfcc
写个博客4 小时前
暑假算法日记第一天
算法
绿皮的猪猪侠4 小时前
算法笔记上机训练实战指南刷题
笔记·算法·pta·上机·浙大
hie988944 小时前
MATLAB锂离子电池伪二维(P2D)模型实现
人工智能·算法·matlab
Jay_5154 小时前
C++多态与虚函数详解:从入门到精通
开发语言·c++
杰克尼5 小时前
BM5 合并k个已排序的链表
数据结构·算法·链表