奇妙的模型转化以及并查集思想

模型概述

有图$G=(V,E)$,初始所有点为白色,现在要将其中一些点染为黑色,要求染色后满足:$∀(u,v)∈E$,$∃col_u!=col_v$。求最小染色点数。

题目描述

曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街。河蟹看到欢快的曹,感到不爽。河蟹决定封锁阳光大学,不让曹刷街。

阳光大学的校园是一张由N个点构成的无向图,N个点之间由M条道路连接。每只河蟹可以对一个点进行封锁,当某个点被封锁后,与这个点相连的道路就被封锁了,曹就无法在与这些道路上刷街了。非常悲剧的一点是,河蟹是一种不和谐的生物,当两只河蟹封锁了相邻的两个点时,他们会发生冲突。

询问:最少需要多少只河蟹,可以封锁所有道路并且不发生冲突。

输入输出格式

输入格式:

第一行:两个整数N,M

接下来M行:每行两个整数A,B,表示点A到点B之间有道路相连。

输出格式:

仅一行:如果河蟹无法封锁所有道路,则输出“Impossible”,否则输出一个整数,表示最少需要多少只河蟹。

说明

【数据规模】

1<=N<=10000,1<=M<=100000,任意两点之间最多有一条道路。


题目分析

本来想写道图论题的,但看题解时候看到一篇并查集的题解感觉非常奇妙……

常规做法

大力搜索?黑白染色?好像无向图缩环之类的在这道题没什么用。

dp也无能为力,因为虽说和树形dp那里独立集全覆盖有些相像,但是这题是图的形式,有环的约束,也不能简单地缩点。

奇妙的并查集

观察一下要求:

  1. 所有道路都要求被覆盖
  2. 选取满足要求的独立集

诶,那么就是说“敌人的敌人就是我的朋友”咯?

这不就成了[BOI2003]团伙那道题吗?

回顾一下那题,我们可以用$enemy[x]$表示所有$x$的敌人。这种思想可以快速合并不在一个集合内的元素,而且非常巧妙!

姑且就称为补集转化的思想吧。这里是以前写的团伙的博客

(感觉好像有那么一点像2-sat???)

 #include<bits/stdc++.h>
const int maxn = ; int sum[maxn],fa[maxn],enemy[maxn];
int n,m,ans;
bool vis[maxn]; int get(int x){return fa[x]==x?x:fa[x]=get(fa[x]);}
void unions(int x, int y)
{
int fx = get(x), fy = get(y);
fa[fx] = fy, sum[fy] += sum[fx], sum[fx] = ;
}
int main()
{
scanf("%d%d",&n,&m);
for (int i=; i<=n; i++) fa[i] = i, sum[i] = ;
for (int i=; i<=m; i++)
{
int a,b,fa,fb;
scanf("%d%d",&a,&b);
fa = get(a), fb = get(b);
if (fa!=fb){
if (enemy[a]) unions(enemy[a], fb);
if (enemy[b]) unions(enemy[b], fa);
enemy[a] = fb, enemy[b] = fa;
}
else{
puts("Impossible");
return ;
}
}
for (int i=; i<=n; i++)
{
int x = get(i);
if (!vis[x]){
int y = get(enemy[x]);
ans += std::min(sum[x], sum[y]);
vis[x] = vis[y] = ;
}
}
printf("%d\n",ans);
return ;
}

END

概述「并查集补集转化」模型&&luoguP1330 封锁阳光大学的更多相关文章

  1. 概述「DAG加边至强连通」模型&&luoguP2746校园网Network of Schools

    模型概述 有一DAG,问最少加多少条边能够使图强连通. 题目描述 一些学校连入一个电脑网络.那些学校已订立了协议:每个学校都会给其它的一些学校分发软件(称作“接受学校”).注意即使 B 在 A 学校的 ...

  2. 「CF319E」Ping-Pong「线段树」「并查集」

    题意 规定区间\((a,b)\)到区间\((c,d)\)有边当且仅当\(c<a<d\)或\(c<b<d\). 起初区间集合为空.有\(n\)(\(n\leq 10^5\))次操 ...

  3. 「LOJ 121」「离线可过」动态图连通性「按时间分治 」「并查集」

    题意 你要维护一张\(n\)个点的无向简单图.你被要求执行\(m\)条操作,加入删除一条边及查询两个点是否连通. 0:加入一条边.保证它不存在. 1:删除一条边.保证它存在. 2:查询两个点是否联通. ...

  4. 并查集补集作法 codevs 1069 关押罪犯

    1069 关押罪犯 2010年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解       题目描述 Description ...

  5. [poj1182]食物链(并查集+补集)

    食物链 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 64841   Accepted: 19077 Description ...

  6. POJ 1182 食物链 【带权并查集/补集法】

    动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种.有人用两种说 ...

  7. HDU 1829 A Bug's Life 【带权并查集/补集法/向量法】

    Background Professor Hopper is researching the sexual behavior of a rare species of bugs. He assumes ...

  8. 牛客练习赛16 C 任意点【并查集/DFS/建图模型】

    链接:https://www.nowcoder.com/acm/contest/84/C 来源:牛客网 题目描述 平面上有若干个点,从每个点出发,你可以往东南西北任意方向走,直到碰到另一个点,然后才可 ...

  9. 洛谷P2024食物链——并查集补集的灵活运用

    题目:https://www.luogu.org/problemnew/show/P2024 自己在做本题时最大的障碍就是:不会在一个集合的father改变时把相应的补集也跟着改变. 借鉴题解后,才明 ...

随机推荐

  1. 【UVA - 10815】Andy's First Dictionary (set)

    Andy's First Dictionary Description 不提英文了 直接上中文大意吧 XY学长刚刚立下了再不过CET就直播xx的flag,为了不真的开启直播模式,XY学长决定好好学习英 ...

  2. 从MySQL高可用引出对高可用架构设计的一些思考

    高可用HA(High Availability)是分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计减少系统不能提供服务的时间. 假设系统一直能够提供服务,我们说系统的可用性是100%.如果 ...

  3. Java并发编程,互斥同步和线程之间的协作

    互斥同步和线程之间的协作 互斥同步 Java 提供了两种锁机制来控制多个线程对共享资源的互斥访问,第一个是 JVM 实现的 synchronized,而另一个是 JDK 实现的 ReentrantLo ...

  4. ios开发static关键字的理解

    :static关键字修饰局部变量::当static关键字修饰局部变量时,该局部变量只会初始化一次,在系统中只有一份内存 :static关键字不可以改变局部变量的作用域,但是可延长局部变量的生命周期,该 ...

  5. 管理现有数据库-web系统

    1 需求 现有的业务数据需要经常被展示,所以选择django作为展示工具.只需要使用django自带的admin app,然后对现有数据库进行建模就可以搞定. 2 代码 settings: DATAB ...

  6. php出现Warning: file_put_contents,failed to open stream

    Warning: file_put_contents(D:/wwwroot/jinxiongdi/web/temp/caches/f/index_40F756F0.php) [function.fil ...

  7. 获取文件的MD5码(C#)

    using System; using System.IO; using System.Security.Cryptography; using System.Text; namespace Test ...

  8. [问题记录]Ubuntu下chmsee安装失败的解决

    日期:2016年2月26日 一直在找Ubuntu下查看chm的工具但是普遍不理想,发现在deepin中的chmsee相对比较好,但是直接执行网上的sudo apt-get install chmsee ...

  9. 【转】HashMap 和 HashTable 到底哪不同 ?

    2017/05/29 | 分类: 基础技术 | 2 条评论 | 标签: HASHMAP, HASHTABLE 分享到: 原文出处: 程序员赵鑫 HashMap和HashTable有什么不同?在面试和被 ...

  10. WebService学习之旅(三)JAX-WS与Spring整合发布WebService

    Spring本身就提供了对JAX-WS的支持,有兴趣的读者可以研究下Spring的Spring-WS项目,项目地址: http://docs.spring.io/spring-ws/sites/1.5 ...