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";
   }

}
相关推荐
地平线开发者12 分钟前
J6B vio scenario sample
算法
BothSavage12 小时前
Trae远程开发中DeepSeek自定义模型4054错误的排查与修复
算法
小林ixn12 小时前
从暴力到KMP:一道题彻底搞懂字符串匹配的前世今生
算法
烬羽14 小时前
字符串算法入门:从反转字符串到回文判断,面试不再慌
算法·面试
郝学胜_神的一滴14 小时前
CMake 034:生成器表达式:解耦构建时序、精简分支逻辑的终极利器
c++·cmake
先吃饱再说1 天前
判断回文字符串,从一行代码到双指针优化
算法
见过夏天1 天前
C++ 基础入门完全指南
c++
黄敬峰1 天前
深入理解算法核心:从递归思想、数组扁平化到快速排序
算法