染色法判定二分图

简介: 复习acwing算法基础课的内容,本篇为讲解基础算法:染色法判定二分图,关于时间复杂度:目前博主不太会计算,先鸽了,日后一定补上。

文章目录

前言

一、二分图

二、AcWing 860. 染色法判定二分图

本题分析

AC代码

三、时间复杂度


前言

复习acwing算法基础课的内容,本篇为讲解基础算法:染色法判定二分图,关于时间复杂度:目前博主不太会计算,先鸽了,日后一定补上。


一、二分图

二分图当且仅当图中不含奇数环

染色方法如图所示:

image.png

我们在遍历图的过程中,需要用BFS或是DFS去遍历,在本文的AC代码中,展示的是用DFS去遍历,下图来自ACWing算法基础课

image.png

二、AcWing 860. 染色法判定二分图

本题链接:AcWing 860. 染色法判定二分图

本博客给出本题截图:

image.png

本题分析

因为是无向图,所以进行add操作的时候需要add(u, v), add(v, u);,如何模拟染色:介绍一下这次的dfs过程,dfs函数中传了两个值,一个是点,另一个是颜色,我们在dfs的for循环中每次取得一个点,然后看这个点有没有被赋予颜色,如果没有被赋予颜色的话,我们就进行dfs(j, 3 - c);,因为我们的颜色只有1和2(当然你可以是2或7,或者其他的颜色,这里为了方便我们把一种颜色称为1,另一种颜色称为2),因为我们的dfs给点赋颜色的时候是1和2两种颜色交替的赋值的,所以在这里,我们只需要用一行代码dfs(j, 3 - c)就可以实现交叉赋颜色;如果下一个点有颜色了,且这个颜色和这个点的上一个点的颜色如果是一样的话即else if (color[j] == c),那么显然是不合法的,返回false


AC代码

#include <cstdio>
#include <cstring>
using namespace std;
const int N = 100010, M = 200010;
int h[N], e[M], ne[M], idx;
int color[N];
void add(int a, int b)
{
    e[idx] = b, ne[idx] = h[a], h[a] = idx ++;
}
bool dfs(int u, int c)
{
    color[u] = c;
    for (int i = h[u]; i != -1; i = ne[i])
    {
        int j = e[i];
        if(!color[j])
        {
            if (!dfs(j, 3 - c)) return false;
        }
        else if (color[j] == c) return false;
    }
    return true;
}
int main()
{
    int n, m;
    scanf("%d%d", &n, &m);
    memset(h, -1, sizeof h);
    while (m -- )
    {
        int u, v;
        scanf("%d%d", &u, &v);
        add(u, v), add(v, u);
    }
    bool flag = true;
    for (int i = 1; i <= n; i ++ )
        if (!color[i])
            if (!dfs(i, 1))
            {
                flag = false;
                break;
            }
    if (flag) puts("Yes");
    else puts("No");
    return 0;
}

三、时间复杂度

关于染色法判定二分图的时间复杂度以及证明,后续会给出详细的说明以及证明过程,目前先鸽了。



目录
相关文章
|
Kubernetes Cloud Native Oracle
开源FaaS平台(一):Knative
Serverless构架不仅仅在工业界有诸多厂商不断为之努力,在开源领域也是有诸多优秀的开源Serverless项目。在《CNCF Cloud Native Interactive Landscape》的Serverless标签中,我们可以看到包括OpenWhisk、Fission、Knative以及Kubeless等在内的众多优秀开源FaaS平台。
1371 0
|
4月前
|
人工智能 安全
|
12月前
|
存储 安全 网络安全
您的计算机已被DevicData勒索病毒感染?恢复您的数据的方法在这里!
随着网络技术进步,网络安全威胁特别是勒索病毒如.DevicData日益严重,该病毒以独特加密方式和强大破坏力著称。遭遇.DevicData攻击后,数据恢复面临重重困难,解密工具也存在局限性。预防措施包括加强员工安全意识、定期更新软件、使用可靠防病毒程序、限制访问权限、定期备份重要数据、实施网络分段及启用多因素认证等。91数据恢复公司成功帮助一家科技企业应对了.DevicData勒索病毒危机,强调了数据备份与网络安全的重要性。对于希望保护自身免受此类威胁的个人或企业,应重视并采取上述最佳实践措施。(240字符)
340 18
|
3月前
|
弹性计算
阿里云ECS云服务器8核16G配置收费价格,多种ECS实例CPU及费用清单
阿里云8核16G云服务器价格因实例类型而异。计算型c9i约743元/月,一年6450元(7折);通用算力型u1仅673元/月,一年4225元(5.1折)。实际价格享时长折扣,详情见ECS官网。
|
8月前
|
人工智能 自然语言处理 数据可视化
生成式AI如何重塑设计思维与品牌创新?从工具到认知革命的跃迁
生成式人工智能(GAI)正在深刻改变创意领域,从设计民主化到品牌创新的三重进化路径,它不仅重构了创作方式,还推动了个人能力模型的迭代。文章探讨了GAI如何通过语义—视觉转换打破传统思维框架,催生动态品牌系统,并促进生态共创。面对变革,创作者需掌握Prompt Engineering等技能,培养跨模态思维与系统设计能力。获取GAI认证则能帮助建立完整认知框架,适应增强型思维模式。这场技术革命并非终点,而是人类创造力新纪元的起点。
|
7月前
|
人工智能 监控 数据可视化
Quick BI × ZOLOZ:数据智能强化跨境交易风险实时管控
随着跨境交易日益频繁,风险管理成为企业国际化的主要挑战。阿里云瓴羊Quick BI联合蚂蚁数科旗下ZOLOZ,推出AI×BI风控分析解决方案,助力全球跨境交易实时管控。通过自由灵活的可视化分析、多Region合规部署及国际化操作体验,Quick BI帮助ZOLOZ实现数据分析标准化,大幅提升决策效率,降低80%成本,服务覆盖25个国家和地区超12亿用户。
193 0
|
9月前
|
Java 数据库
MapStruct详细解析
总的来说,MapStruct是一个强大的对象映射工具,它可以大大提高开发效率,减少错误,值得在项目中使用。
265 17
|
10月前
|
存储 缓存 弹性计算
聚宽揭秘:为什么量化研究员喜欢在Kubernetes上使用Fluid简化数据管理?
通过引入阿里云的 ack-fluid 技术,基于 JindoRuntime 的分布式缓存加速,解决了多数据源、弹性扩展、动态挂载等挑战,显著提升了数据处理效率和资源利用率,降低运营成本。这一方案帮助量化研究员实现了更高效的开发和实验流程,为未来的优化和扩展奠定了基础。
|
JavaScript 前端开发 安全
|
12月前
|
机器学习/深度学习 监控 安全
10分钟轻松实现人脸精准识别
本文将具体介绍如何利用云服务部署深度学习模型,快速接入人脸比对服务。