染色法判定二分图
20230723与y总代码模板不同,为自己独立实现,不够美观,但便于自己理解
debug过程:
- 需要注意到本题是无向图,所以add函数需要用两次,还有就是我们使用链式前向星结构去存图,所以ne和e数组需要开两倍的边数。
就是因为数组开小了,导致最后tle了,数组开小了什么报错都有可能出现
- 染色算法能够解决非连通图的二部图判定,所以从一个点dfs出发是不够的,要
多源dfs
也就是说对每个连通块进行dfs,先对一个点dfs后,找此时没有被染色的点再dfs,直到全都被染色或者dfs过程中return false; - 这个dfs过程不需要还原现场,因为我们需要保留所有点的颜色。
- 我的代码中dfs函数只有一个参数,yxc的代码是两个参数,都是可以的?!
1 | #include <bits/stdc++.h> |
双参数版的代码
dfs的含义:将u这个点染成c颜色后,返回值是表示会不会出现冲突
1 | #include <bits/stdc++.h> |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 爱飞鱼的blog!
