首页 > 其他分享 >并查集判断(DSU)二分图

并查集判断(DSU)二分图

时间:2023-02-08 01:00:31浏览次数:57  
标签:二分 标号 查集 int DSU 判断

并查集(DSU)判断二分图

题目链接

二分图

性质

  • 当且仅当图中不存在奇数环

偶数环时

img

可以扭成这样

img

但奇数环则不可以

img

从染色法的角度来考虑:假设一个二分图中左边标号为1,右边标号为2。
则对于一个环来说 1 -> 2 -> 3 -> 4 -> ... -> n, 假设当前1的标号为1,根据二分图的定义,和1相连的点的标号应该为2,则2的标号为2,同理3的标号为1,4的标号为2,如此进行,最终如果环的边数为奇数,最终的1会被认为既属于1又属于2,如下图:

img

染色法判断二分图

做一遍bfs

并查集判断二分图

struct DSU {
    vector<int> p;
    DSU(int n) {
        p.resize(n + 1, 0);
        for (int i = 1; i <= n; i++) p[i] = i;
    }
    int find(int x) {
        return x == p[x] ? x : p[x] = find(p[x]);
    }
    void merge(int x, int y) {
        x = find(x);
        y = find(y);
        if (x != y) p[x] = y;
    }
};
int main() {
    int n, m;
    cin >> n >> m;
    DSU d(n * 2);
    for (int i = 1; i <= m; i++) {
        int u, v;
        cin >> u >> v;
        d.merge(u, n + v);
        d.merge(u + n, v);
    }
    bool f = true;
    for (int i = 1; i <= n; i++) {
        if (d.find(i) == d.find(i + n)) {
            f = false;
        }
    }
    puts(f ? "Yes" : "No");
    return 0;
}

标签:二分,标号,查集,int,DSU,判断
From: https://www.cnblogs.com/rufu/p/17100272.html

相关文章

  • CodeForces - 240 C. Practice 模拟或者二分或者规律
    LittletimeisleftbeforeBerlandannualfootballchampionship.Thereforethecoachofteam"LosewilleRangers"decidedtoresumethepractice,thatwereindef......
  • P7585 [COCI2012-2013#1] LJUBOMORA 二分 普及-
    赤裸二分#include<iostream>#include<cmath>usingnamespacestd;constintN=300010;intn,m,rr;intc[N];boolcheck(intmid){intcot=0;for(inti......
  • 二分模板以及部分二分题
    题目来源于学校oj(刷一部分比较简单的题)模板题(但在A-B数对题里面改进了模板)http://www.mangata.ltd/p/P1190#include<iostream>#include<algorithm>//含有sort函数,......
  • 种类并查集 洛谷 P2024 食物链
    题目描述动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形。A吃B,B吃C,C吃A。现有N个动物,以1-N编号。每个动物都是A,B,C中的一种,但是我们并不知道......
  • 带权并查集 区间统计
    带权并查集区间统计例题:​​HDU ZjnuStadium​​(模板)​​HDU3038HowManyAnswersAreWrong​​与普通并查集不同是新增加一个属性:dist[a]:表示a到父亲节点的距离操......
  • 51NOD 1278 相离的圆(二分 + 排序 好题)
    平面上有N个圆,他们的圆心都在X轴上,给出所有圆的圆心和半径,求有多少对圆是相离的。例如:4个圆分别位于1,2,3,4的位置,半径分别为1,1,2,1,那么{1,2},{1,3}{2,3}{2,4......
  • 【bzoj4668】冷战 (并查集按秩合并+朴素LCA)
    题目描述1946年3月5日,英国前首相温斯顿·丘吉尔在美国富尔顿发表“铁幕演说”,正式拉开了冷战序幕。美国和苏联同为世界上的“超级大国”,为了争夺世界霸权,两国及其盟国......
  • POJ 1611--The Suspects【并查集水题】
    TheSuspectsSevereacuterespiratorysyndrome(SARS),anatypicalpneumoniaofunknownaetiology,wasrecognizedasaglobalthreatinmid-March2003.Tominim......
  • AcWing整数二分算法模板
    原链接boolcheck(intx){/*...*/}//检查x是否满足某种性质//区间[l,r]被划分成[l,mid]和[mid+1,r]时使用:intbsearch_1(intl,intr){while(l<r......
  • LeetCode搜索旋转排序数组(/二分查找)
    原题解题目约束题解classSolution{public:intsearch(vector<int>&nums,inttarget){intn=(int)nums.size();if(!n){......