二分图一•二分图判定+异或运算

「题解」agc031_c Differ by 1 Bit 本文将同步发布于: 洛谷博客; csdn; 博客园; 简书; 题目 题目链接:洛谷 AT4693、AtCoder agc031_c。 题意概述 给定三个数 n,a,bn,a,bn,a,b,求一个 0∼2n−10\sim 2^n-10∼2n−1 的排列满足下列三个条件: p1=ap_1=ap1​=a; p2n=bp_{\tiny{2^n}}=bp2n​=b; popcount⁡(pi⊕pi+1)=1\operatorname{popcount}(p_i\oplus p_{i+1})=1popcount( 阅读详情


Link:http://hihocoder.com/problemset/problem/1121?sid=254176


时间限制: 10000ms
单点时限: 1000ms
内存限制: 256MB
描述

大家好,我是小Hi和小Ho的小伙伴Nettle,从这个星期开始由我来完成我们的Weekly。

新年回家,又到了一年一度大龄剩男剩女的相亲时间。Nettle去姑姑家玩的时候看到了一张姑姑写的相亲情况表,上面都是姑姑介绍相亲的剩男剩女们。每行有2个名字,表示这两个人有一场相亲。由于姑姑年龄比较大了记性不是太好,加上相亲的人很多,所以姑姑一时也想不起来其中有些人的性别。因此她拜托我检查一下相亲表里面有没有错误的记录,即是否把两个同性安排了相亲。

OK,让我们愉快的暴力搜索吧!

才怪咧。

对于拿到的相亲情况表,我们不妨将其转化成一个图。将每一个人作为一个点(编号1..N),若两个人之间有一场相亲,则在对应的点之间连接一条无向边。(如下图)

因为相亲总是在男女之间进行的,所以每一条边的两边对应的人总是不同性别。假设表示男性的节点染成白色,女性的节点染色黑色。对于得到的无向图来说,即每一条边的两端一定是一白一黑。如果存在一条边两端同为白色或者黑色,则表示这一条边所表示的记录有误。

由于我们并不知道每个人的性别,我们的问题就转化为判定是否存在一个合理的染色方案,使得我们所建立的无向图满足每一条边两端的顶点颜色都不相同。

那么,我们不妨将所有的点初始为未染色的状态。随机选择一个点,将其染成白色。再以它为起点,将所有相邻的点染成黑色。再以这些黑色的点为起点,将所有与其相邻未染色的点染成白色。不断重复直到整个图都染色完成。(如下图)

在染色的过程中,我们应该怎样发现错误的记录呢?相信你一定发现了吧。对于一个已经染色的点,如果存在一个与它相邻的已染色点和它的颜色相同,那么就一定存在一条错误的记录。(如上图的4,5节点)

到此我们就得到了整个图的算法:

  1. 选取一个未染色的点u进行染色
  2. 遍历u的相邻节点v:若v未染色,则染色成与u不同的颜色,并对v重复第2步;若v已经染色,如果 u和v颜色相同,判定不可行退出遍历。
  3. 若所有节点均已染色,则判定可行。

接下来就动手写写吧!

输入

第1行:1个正整数T(1≤T≤10)

接下来T组数据,每组数据按照以下格式给出:

第1行:2个正整数N,M(1≤N≤10,000,1≤M≤40,000)

第2..M+1行:每行两个整数u,v表示u和v之间有一条边

输出

第1..T行:第i行表示第i组数据是否有误。如果是正确的数据输出”Correct”,否则输出”Wrong”

样例输入
2
5 5
1 2
1 3
3 4
5 2
1 5
5 5
1 2
1 3
3 4
5 2
3 5
样例输出
Wrong
Correct



My  AC  code:

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<queue>
#include<vector>
#define MAXN 10010
using namespace std;
int n,m,u,v,ans;
int mark[MAXN];
vector<int>map[MAXN];
bool dfs(int x)
{
	for(int i=0;i<map[x].size();i++)
	{
		if(mark[map[x][i]]==-1)
		{
		   mark[map[x][i]]=mark[x]^1;
		   dfs(map[x][i]);
		}
		else
		{
			if(mark[map[x][i]]==mark[x])
	    	return false;
		}
	}
	return true;
}
int main()
{
	int t,fg;
	while(~scanf("%d",&t))
	{
		while(t--)
		{
			while(~scanf("%d%d",&n,&m))
			{
				for(int i=1;i<=n;i++)
				{
					map[i].clear();				
			    }
				while(m--)
				{
					scanf("%d%d",&u,&v);
					map[u].push_back(v);
					map[v].push_back(u);
				}
				fg=1;
			    memset(mark,-1,sizeof(mark));
		    	for(int i=1;i<=n;i++)//循环不同起点的目的是因为图有可能不连通
		    	{
		    		
				    if(!dfs(i))
				    {
				    	printf("Wrong\n");
				    	fg=0;
				    	break;
					}
		    	}
		    	if(fg)
		    	{
		    		printf("Correct\n");
				}
			}
		}
	}
	return 0;
}


附BFS代码(来自http://www.cnblogs.com/yspworld/p/4306593.html):


#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <vector>
#include <queue>

#define N 10001

using namespace std;
int n, m;
vector<int>q[N];
int flag[N];
bool vis[N];
bool bfs(int dd)
{
    //0代表未着色,1代表白色,2代表黑色

    queue<int>p;
    while(!p.empty()) p.pop();
    p.push(dd);
    flag[dd]=1;
    vis[dd]=true;
    while(!p.empty())
    {
        int dd=p.front(); p.pop();
        //printf("%d***", dd);

        for(int i=0; i<q[dd].size(); i++)
        {
            if(flag[q[dd][i]]==0 )
            {
                flag[q[dd][i]] = flag[dd]==1?2:1;
                p.push(q[dd][i]);
            }
            else if(flag[q[dd][i]] == flag[dd] )
            {
                return false;
            }
        }
    }
    return true;
}
bool is_bi()
{
    for(int i=1;i<=n;i++){
        if(!flag[i])
        {
            flag[i] = 1;
            if(!bfs(i))
                return false;
        }
    }
    return true;
}


int main()
{
    int i, j, u, v;
    int t;
    scanf("%d", &t);
    while(t--)
    {
        scanf("%d %d", &n, &m);
        for(i=1; i<=n; i++)
            q[i].clear();
        for(i=0; i<m; i++)
        {
            scanf("%d %d", &u, &v);
            q[u].push_back(v);
            q[v].push_back(u); //建立无向图
        }
        memset(flag, 0, sizeof(flag));
        if(is_bi())
            printf("Correct\n");
        else
            printf("Wrong\n");
    }
    return 0;
}






Algorithm保姆级笔记(基础+提高+Top1+杂题+Top2+蓝桥杯) 算法 阅读详情

相关推荐

ACWing基础课程题目

ACWing基础大全 ===================================== 第一讲 基础算法完成情况:20/20 包括排序、二分、高精度、前缀和与差分、双指针算法、位运算、离散化、区间合并等内容。 快速排序 AcWing 785. 快速排序 AcWing 786. 第k个数 归并排序 AcWing 787. 归并排序 AcWing 788. 逆序对的数量 二分 AcWing 789. 数的范围 AcWing 790. 数的三次方根 高精度 AcWing 791. 高精度加法 AcW

qq_52384627的博客 4866

图论——连通性

割点: 1.无向图 2.删去这个点及其所连边后,图不再联通 点双连通图: 1.无向图 2.没有割点(删去任意一个点图仍联通) 点双联通分量: 无向图G中所有子图G’ 如果G’ 1.是点双联通子图 2.不是其他点双联通子图的真子集, 则G’是G的极大点双联通子图,也称点双联通分量。 桥(割边): 1.无向图 2.删此边(不删其连着的点),剩下的图不再联通 边双连通图: 1.无向图 2.删任意一边,剩下的图仍联通 边双联通分量: 无向图G中所有子图G’ 如果G’ 1.是边双联通子图 2.不是其他边双联通

Albert_Jw的博客 2185

常用算法代码模板 (3) :搜索与图论

常用算法模板——搜索与图论:邻接矩阵与邻接表、DFS、BFS、拓扑排序、最短路径、最小生成树、二分图

https://www.hyperplasma.top 1534

hdu 4751 判二分图,整个图不一定连通

题意:人与人之间可以认识或不认识,可以单向认识也可以双向认识,给你他们认识的关系,让你将他们分成两组,每组里面的任意两个人都认识。 转化一下,将双向认识的人之间不连边,单向认识或不认识的人连边,然后判二分图就行了。 #include #include #include #include using namespace std; const int maxn=105; int maze[maxn

、Poppy 793

2023年信奥赛C++提高组csp-s初赛选择题真题及答案解析(6-10)

2023年信奥赛C++提高组csp-s初赛选择题真题及答案解析(6-10)

王老师青少年编程 832

YOLOv8中Bottleneck模块的残差连接机制解析

本文深入解析了YOLOv8目标检测模型中Bottleneck模块的核心设计,重点阐述了其残差连接机制。该机制通过构建一条信息“捷径”,有效缓解了深层网络中的梯度消失问题,稳定了训练过程,并提升了特征提取效率。文章结合代码详细拆解了模块结构,并探讨了其在YOLOv8骨干网络与检测头中的关键作用及参数调优思路。

weixin_29061821的博客 253

【图论学习】——二分图

本文介绍了二分图的基本概念、性质及两种判定算法。

German_Sparrow的博客 796

2019年电赛D题《简易电路特性测试仪》全过程

2019年全国大学生电子设计大赛D题《简易电路特性测试仪》硬件部分及故障分析

zzhao2580的博客 5万+

二分图 | 染色法判定二分图

二分图 二分图,又叫二部图,将所有点分成两个集合,使得所有边只出现在集合之间的点之间,而集合内部的点之间没有边。 当一个图只有n个顶点,没有边时,只能分成一个集合,也是二分图 二分图,当且仅当图中没有奇数环。 所以,只要图中没有环 或者 只有偶数环,一定是二分图。 从而推出,树一定是二分图。 二分图不一定是连通图,也可能是非连通图。 染色法 ...

HangHug_L的博客 1690

同花顺自动化交易避坑指南:pywinauto实战中验证码识别与界面弹窗处理

本文深入探讨同花顺自动化交易中的关键稳定性问题,重点解决验证码识别与弹窗处理两大难题。通过优化Tesseract OCR、整合打码平台API以及设计pywinauto弹窗监控体系,提供了一套完整的自动化交易解决方案,帮助交易者有效规避资金账户和持仓信息操作中的常见陷阱。

weixin_33734785的博客 486

四非人的保研之路,2024(2025届)四非计算机的保研经验分享(西南交通、苏大nlp、西电、北邮、山软、山计、电科、厦大等)

本身我就是福建人,xmu 3小时就能到家,然后导这边毕业要求容易,不想读博,达到要求就能放实习,每周打卡35h,比较自由,遂考虑。北邮弱com,联系了蛮多老师,几乎都给了考核机会,面试的老师好几位都考核人工智能基础,会问你卷积的计算,问的还是蛮细的。当时结果是暂定,以为是稳了,遂没联系其他老师,但是之后询问发现只是候补,懒得联系其他老师,928候补到,放弃。东北大学,2000人大机试,入营点送,全国巡回面试,每个人就面不到10分钟,我就被问了3个问题就结束了,候补。科研组,导师有人脉,想读博出成果可以去。

专注于AI领域前沿知识,业余爱好开发软件 4351

二分图学习 - hiho1121

题目链接:http://hihocoder.com/problemset/problem/1121   题解:二分图染色,写了三遍才搞定   #include &lt;cstdio&gt; #include &lt;vector&gt; #include &lt;cstring&gt; using namespace std; vector&lt; vector&lt;int&gt...

BlueSky 310

audio语音相关的基础知识-VAD,ASR,AEC,AGC,BF等

有音素之间的间隙,也有静音和语音本身的间隙,为了对数据从时间上进行相对的校准,语音端点检测技术就应运而生了,因此端点检测技术可以决定这种校准的相对精度,使得同一内容的特征更趋于相同,当然,一般情况下是不可能完全相同的。盲源分离的目的是求得源信号的最佳估计,盲辨识的目的是求得传输通道的。这个技术的主要任务是从带有噪声的语音中准确的定位出语音的开始和结束点,因为语音中含有很长的静音,也就是把静音和实际语音分离开来,因为是语音数据的原始处理,所以VAD是语音信号处理过程的关键技术之一。呈现出与会者清晰的声音。

u013250861的博客 1034

数据结构:二分图以及判定二分图

是一种特殊的图,它的顶点集合可以划分为两个不相交的子集,使得每条边都连接这两个子集中的一个顶点和另一个顶点。换句话说,二分图中的所有边都只能在两个不同的子集之间。染色法判定二分图虽然听起来很难,但实际上是一个很简单的算法,读完此文章,相信大家都很容易掌握。

m0_63997099的博客 5044

Android 15.0 首次开机默认授予app运行时权限(去掉运行时授权弹窗)

在15.0的系统rom产品定制化开发中,在6.0以后对于权限的申请,都需要动态申请,所以会在系统首次启动后,在app的首次运行时, 会弹出授权窗口,会让用户手动授予app运行时权限,在由于系统产品开发需要要求默认授予app运行时权限,不需要用户默认授予运行时弹窗,所以需要在首次开机默认授予所有app运行时权限

安卓兼职framework和app工程师的博客 1204

Vue3 - 详细实现微信公众号H5网页内置浏览器中预览下载word文档(doc)、excel表格(xls)、ppt文稿、pdf文档等文件,微信内部直接打开预览和下载到本地教程,安卓苹果手机无差异兼容

vue3,nuxt3,微信公众号,h5,移动端,网页,网站,vue微信内置浏览器下载文件,下载文件,在微信浏览器里面实现下载任意文件,H5需要在微信浏览器中下载excel文件,实现网页在微信内置浏览器中下载文件详细教程,安卓点击下载会提示打开浏览器,后端返回流文件,如何解决无法下载文件,跳转至浏览器下载文件,发送到电脑微信,安卓,苹果,手机系统,微信H5页面,vue3微信公众号H5网站,内置浏览器下载文档,如何在微信浏览器中预览office文件,word文档,excel文档,pdf文档,ppt文档,offi

🏆 前端领域优质创作者 1万+

AcWing 860:染色法判定二分图 ← 染色法 + 二分图

染色法的染色逻辑 (1)使用两种颜色:颜色 1 和颜色 2。 (2)若当前节点染色为 c,相邻节点必须染为 3^c(即 3-c)。这是因为,3^1=2,3^2=1,故通过异或运算可实现颜色切换。

hnjzsyjyj的专栏 1067

第一章 DRM 子系统概述:1.2 专栏定位与技术覆盖范围

本专栏系统解析Linux内核DRM图形子系统的核心技术,涵盖GEM对象管理、TTM内存机制、DRM-Fence同步等核心模块,深入剖析DMA-BUF共享、DMA_Resv资源管理等关键技术。通过解读内核源码与用户态接口(libdrm),结合进程管理、匿名inode等底层机制,构建完整的DRM知识体系。专栏兼顾深度与易懂性,辅以实际应用场景分析,既适合图形驱动开发新手入门,也可满足资深工程师进阶需求,帮助读者掌握从内核实现到应用开发的全栈知识。

图形/计算GPU的驱动与虚拟化技术分享园地 3021

【思维题】【二分图】TopCoder 12316 —— ThreeColorability

题目传送门 虽然这道题标签有个二分图,实际上只是用来判断解的.此题的精髓应该是思维的过程 首先利用样例 (题解),观察出2*2的格子中,如果有解,那么解一定为四个一样或者各两个的情况.不可能存在三个与一个的情况.也就是说,如果其中三条对角线的方向已经确定了,那么第四条的方向也是确定的. 将上述的性质转换为式子就是 cells[x1][y1]⨂cells[x1][y2]⨂cells[x2][y1]⨂...

蒟蒻该待的地方 526

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

785. 判断二分图(图)

二分图,着色法 class Solution { public boolean isBipartite(int[][] graph) { int n = graph.length; int[] color = new int[n];//color即作为visited数组,又作为标识结点颜色的数组,-1表示未着色,0表示着蓝色,1表示着红色; ...

qq_37637619的博客 276

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

洛谷 P1330:封锁阳光大学 ← 染色法 + 二分图

​本题代码大部分与“AcWing 860:染色法判定二分图”相同。详见:https://blog.youkuaiyun.com/hnjzsyjyj/article/details/155323274

hnjzsyjyj的专栏 1716

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

第三周:二分图+状压dp+线性基+三分+raney引理

这周的两场牛客一场周赛打的一坨大变,得出一个结论:我会的太少了,甚至赛后看题解用到的算法听都没听过。。。

sirimax的博客 259

2026-01-25~26 hetao1733837 的刷题笔记

浦东给孩子整难受了,这玩意这是个大工程,要记住,还是以看书为主,所以,整理笔记似乎是比较理想的方式,但是也意味着占用大量的时间。所以,加油吧,路还很长!然后把必修二和选必一提上日程!寒假外培之前尽可能学完他们之前学的,加油!然后周二要考浦东的话,还是去一下吧,这几天大略得过一下知识点,不求能写出来多少,毕竟是竞赛吗,还都是初学者。然后实力有了一些了,找xy推荐亿些书,自己看,其实竞赛到后面都这样,还有就是刷题,看今年能不能有所建树,无论是BO还是OI。把HT这周的题单打一打吧……

hetao1733837的博客 697

图论·刷题总结

本文总结了图论中的核心算法与应用场景,重点包括: 连通性问题:介绍了DFS染色法和并查集两种方法,强调边带权并查集的应用。 环检测技术: 提出三色标记法的DFS实现,解释其记忆化搜索原理 对比拓扑排序的适用场景 最短路问题: 区分BFS(等权图)、Floyd(多源)等算法 详细说明最小修改次数问题的建模方法 强调网格图坐标转换技巧 二分图应用:包括冲突组检测和匹配问题解决方案。 典型例题分类:涵盖连通块、路径搜索、拓扑排序等题型,特别指出BFS在状态转换问题中的高效性。 文章提供了算法模板和解题思路,适合作

2301_80132162的博客 607

bzoj 2744 朋友圈

题目大意: 两个国家 各有A和B个人,每个人有一个数值。 若两个A国的人满足$val_i\space xor \space val_j \mod 2 =1$ 则他们为朋友 若两个B国的人满足$val_i\space xor \space val_j \mod 2 =0$或者二进制下$val_i \space or\space val_j$中有奇数个1 则他们为朋友 给出一些A国的人与B国的...

weixin_30367543的博客 124

CF错题集

我有一个想法,首先取每个树枝的顺序肯定是从上到下,第一个不用考虑重叠,随后的n-1个树枝,通过底部的坐标加上高,与它上面一个树枝的底的坐标进行比较,小则没有重叠,反之,则有重叠。那么重叠该怎么计算,可以用三角形的面积减去重叠部分的面积。但是我感觉应该还有更优的解法。其实已是最优解。证明的话,时间复杂度o(n),满足了。

lll123asdzxc的博客 150
上一篇: 二分图三·二分图最小点覆盖和最大独立集
下一篇: 二分图二•二分图最大匹配之匈牙利算法
林下的码路
博客等级 码龄12年 295粉丝 506原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林下的码路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值