AtCoder Beginner Contest 327D

D - Good Tuple Problem (atcoder.jp)(种类并查集,二分图染色)

算法学习笔记(7):种类并查集

附上典题:P1892 [BOI2003] 团伙

种类并查集做法

#include <bits/stdc++.h>
#define debug(a) cout<<#a<<"="<<a<<'\n'; using namespace std;
using i64 = long long; typedef pair<i64, i64> PII; template<typename T>
struct UFS {
T sz;
vector<T> rank, p;
void link(T x, T y) {
if (x == y)
return;
if (rank[x] > rank[y])
p[y] = x;
else
p[x] = y;
if (rank[x] == rank[y])
rank[y]++;
}
void init(int n) {
sz = n;
rank.resize(n + 1);
p.resize(n + 1);
for (int i = 0; i <= sz; i++) {
p[i] = i;
rank[i] = 0;
}
}
T find(T x) {
return x == p[x] ? x : (p[x] = find(p[x]));
}
void unin(T x, T y) {
link(find(x), find(y));
}
void compress() {
for (int i = 0; i < sz; i++)
find(i);
}
}; int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr); int n, M;
cin >> n >> M;
vector<int> A(M), B(M);
for (auto &i : A)
cin >> i;
for (auto &i : B)
cin >> i; UFS<i64> ufs;
ufs.init(n * 2);
for (int i = 0; i < M; i ++) {
int u = ufs.find(A[i]);
int v = ufs.find(B[i]);
if (u == v) {
cout << "No\n";
return 0;
}
ufs.unin(B[i] + n, u);
ufs.unin(A[i] + n, v);
} cout << "Yes\n"; return 0;
}

二分图染色

#include <bits/stdc++.h>
#define debug(a) cout<<#a<<"="<<a<<'\n'; using namespace std;
using i64 = long long; typedef pair<i64, i64> PII; int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr); int n, m;
cin >> n >> m;
vector G(n + 1, vector<int>());
vector<int> co(n + 1, -1), A(m), B(m);
for (auto &i : A) cin >> i;
for (auto &i : B) cin >> i; for (int i = 0; i < m; i ++) {
G[A[i]].push_back(B[i]);
G[B[i]].push_back(A[i]);
} auto dfs = [&](auto self, int x, int val) -> void{
co[x] = val;
for (auto i : G[x]) {
if (co[i] == -1) {
self(self, i, val ^ 1);
} else if (co[i] == val) {
cout << "No\n";
exit(0);
}
}
}; for (int i = 1; i <= n; i ++)
if (co[i] == -1)
dfs(dfs, i, 0); cout << "Yes\n"; return 0;
}

AtCoder Beginner Contest 327 D的更多相关文章

  1. AtCoder Beginner Contest 100 2018/06/16

    A - Happy Birthday! Time limit : 2sec / Memory limit : 1000MB Score: 100 points Problem Statement E8 ...

  2. AtCoder Beginner Contest 052

    没看到Beginner,然后就做啊做,发现A,B太简单了...然后想想做完算了..没想到C卡了一下,然后还是做出来了.D的话瞎想了一下,然后感觉也没问题.假装all kill.2333 AtCoder ...

  3. AtCoder Beginner Contest 053 ABCD题

    A - ABC/ARC Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Smeke has ...

  4. AtCoder Beginner Contest 136

    AtCoder Beginner Contest 136 题目链接 A - +-x 直接取\(max\)即可. Code #include <bits/stdc++.h> using na ...

  5. AtCoder Beginner Contest 137 F

    AtCoder Beginner Contest 137 F 数论鬼题(虽然不算特别数论) 希望你在浏览这篇题解前已经知道了费马小定理 利用用费马小定理构造函数\(g(x)=(x-i)^{P-1}\) ...

  6. AtCoder Beginner Contest 076

    A - Rating Goal Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Takaha ...

  7. AtCoder Beginner Contest 079 D - Wall【Warshall Floyd algorithm】

    AtCoder Beginner Contest 079 D - Wall Warshall Floyd 最短路....先枚举 k #include<iostream> #include& ...

  8. AtCoder Beginner Contest 064 D - Insertion

    AtCoder Beginner Contest 064 D - Insertion Problem Statement You are given a string S of length N co ...

  9. AtCoder Beginner Contest 075 D - Axis-Parallel Rectangle【暴力】

    AtCoder Beginner Contest 075 D - Axis-Parallel Rectangle 我要崩溃,当时还以为是需要什么离散化的,原来是暴力,特么五层循环....我自己写怎么都 ...

  10. AtCoder Beginner Contest 075 C bridge【图论求桥】

    AtCoder Beginner Contest 075 C bridge 桥就是指图中这样的边,删除它以后整个图不连通.本题就是求桥个数的裸题. dfn[u]指在dfs中搜索到u节点的次序值,low ...

随机推荐

  1. 【长文】带你搞明白Redis

    本文使用第一人称来介绍Redis 一.概述 Redis,英文全称是Remote Dictionary Server(远程字典服务),是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化 ...

  2. 使用allparis正交法,生成测试用例

    原文:https://www.csdn.net/tags/MtzaggysODU0NTItYmxvZwO0O0OO0O0O.html 介绍工具前先讲下理论知识正交法一般适用于多个输入条件且条件与条件之 ...

  3. Linux gpio子系统:gpio_direction_output 与 gpio_set_value的区别

    Linux gpio子系统:gpio_direction_output 与 gpio_set_value的区别 背景 最近改驱动程序,看到驱动代码中既有gpio_direction_output也有g ...

  4. HTTP协议 学习:2-基于libcurl的开发

    HTTP协议 学习:2-基于libcurl的开发 背景 上一讲我们介绍了HTTP报文的一些内容,这一讲我们基于http有关的开源库,进行HTTP通信.最后再完成一个简单的下载小程序. ref : ht ...

  5. arm-gcc 命名规则

    背景 在 Ubuntu中交叉编译裸机程序的时候,注意到了这个问题:因此对此作为一个总结. 命名规则 交叉编译工具链的命名规则为:arch [-vendor] [-os] [-(gnu)eabi] ar ...

  6. LAMP-CentOS7搭建Web服务器

    搭建LAMP Web服务器 在家中翻到了以前用的老电脑,在思索一番后,决定把这台电脑改造成一台Web服务器,作为我自己搭建博客的测试机器. 一.Linux服务器 LAMP中的L指的是Linux服务器, ...

  7. Golang 切片作为函数参数传递的陷阱与解答

    作者:林冠宏 / 指尖下的幽灵.转载者,请: 务必标明出处. GitHub : https://github.com/af913337456/ 出版的书籍: <1.0-区块链DApp开发实战&g ...

  8. 解决php提示Maximum execution time of 30 seconds exceeded错误

    如何解决错误? 基本上,有3种方法可以处理此错误: 修改php配置文件php.ini文件 使用 ini_set() 函数 使用set_time_limit()函数 1)修改php配置文件php.ini ...

  9. oeasy教您玩转vim - 51 - # 读写文件

    读写文件 回忆上节课内容 命令行的光标控制 方向键️️️️️可以控制左右移动 shift+️️️️️按照word左右移动光标 ctrl+b 到开头begin ctrl+e 到结尾end ctrl+w ...

  10. 03-springboot使用单元测试和日志框架

    目录 1,springboot使用单元测试 2,使用日志框架 1,springboot使用单元测试 A:springboot使用单元测试需要引入一个单元测试启动器,该启动器的坐标为: <depe ...