洛谷P1330 封锁阳光大学【dfs】
题目:https://www.luogu.org/problemnew/show/P1330
题意:一个无向边,一个河蟹可以占领一个点,但一个点只能被一个河蟹占领。
占领了一个点之后,这个点所有的边都删除。
问至少需要多少个河蟹可以让所有的边都被删除。
思路:
乍一看有点无从下手。但实际上这个题就是一个将图上的点进行黑白着色的问题。
如果一个点被着了黑色,那么他的邻接点都要被着白色。
这道题给的图可能是一个森林,并且着色其实两个颜色可以对换。所以对于每一个连通块,至少应该有的河蟹数是两个颜色中较少的那个。
#include<cstdio>
#include<cstdlib>
#include<map>
#include<set>
#include<cstring>
#include<algorithm>
#include<vector>
#include<cmath>
#include<stack>
#include<queue>
#include<iostream> #define inf 0x7fffffff
using namespace std;
typedef long long LL;
typedef pair<int, int> pr; int n, m;
const int maxn = ;
const int maxm = 1e5 + ;
int col[maxn];
int head[maxn], to[maxm * ], nxt[maxm * ];
int tot = ; void add(int x, int y)
{
to[++tot] = y;
nxt[tot] = head[x];
head[x] = tot;
to[++tot] = x;
nxt[tot] = head[y];
head[y] = tot;
} int cnt[];
bool dfs(int c, int x)
{
if(col[x] && col[x] != c){
return false;
}
else if(col[x])return true;
col[x] = c;
cnt[c]++;
for(int i = head[x]; i; i = nxt[i]){
int y = to[i];
if(!dfs(c ^ , y))return false;
}
return true;
} int main()
{
scanf("%d%d", &n, &m);
for(int i = ; i < m; i++){
int x, y;
scanf("%d%d", &x, &y);
add(x, y);
}
bool flag = true;
int ans = ;
for(int i = ; i <= n; i++){
if(!col[i]){
if(!dfs(, i)){
flag = false;
break;
}
else{
ans += min(cnt[], cnt[^]);
memset(cnt, , sizeof(cnt));
}
}
}
if(!flag){
printf("Impossible\n");
}
else{
printf("%d\n", ans);
}
}
洛谷P1330 封锁阳光大学【dfs】的更多相关文章
- 洛谷——P1330 封锁阳光大学
P1330 封锁阳光大学 题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹决定封锁阳光大学,不让曹刷街. 阳光大学的校园是一张由N个点构 ...
- 洛谷P1330 封锁阳光大学(二分图染色)
P1330 封锁阳光大学 题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹决定封锁阳光大学,不让曹刷街. 阳光大学的校园是一张由N个点构 ...
- 洛谷 P1330 封锁阳光大学 Label:染色问题
题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹决定封锁阳光大学,不让曹刷街. 阳光大学的校园是一张由N个点构成的无向图,N个点之间由M ...
- 洛谷P1330 封锁阳光大学 [图论,染色]
题目传送门 封锁阳光大学 题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹决定封锁阳光大学,不让曹刷街. 阳光大学的校园是一张由N个点构 ...
- 洛谷P1330封锁阳光大学[二分图染色]
题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹决定封锁阳光大学,不让曹刷街. 阳光大学的校园是一张由N个点构成的无向图,N个点之间由M ...
- 洛谷P1330 封锁阳光大学
题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹决定封锁阳光大学,不让曹刷街. 阳光大学的校园是一张由N个点构成的无向图,N个点之间由M ...
- 洛谷 P1330 封锁阳光大学
题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹决定封锁阳光大学,不让曹刷街. 阳光大学的校园是一张由N个点构成的无向图,N个点之间由M ...
- 洛谷 P1330 封锁阳光大学题解
题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹决定封锁阳光大学,不让曹刷街. 阳光大学的校园是一张由N个点构成的无向图,N个点之间由M ...
- 洛谷P1330封锁阳光大学——图的染色
题目:https://www.luogu.org/problemnew/show/P1330 此题我最初没有思路,暴搜而爆0: 然后才明白关键在于把所有点分成两类,因为可以发现点之间的关系是存在两两对 ...
随机推荐
- 什么是HybridDB for MySQL (原PetaData)
云数据库HybridDB for MySQL (原名PetaData)是同时支持海量数据在线事务(OLTP)和在线分析(OLAP)的HTAP(Hybrid Transaction/Analytical ...
- css — 选择器、盒子模型
目录 1. css引入方式 2. css选择器 3. css的盒模型 css: 层叠样式表 1. css引入方式 行内样式 <div style='color:red;'>mjj</ ...
- Linux驱动函数解读
一.kmalloc().kzalloc()和vmalloc() 这三个函数都可以分配连续的虚拟内存 除此之外,这三个函数的区别有: 1. kmalloc()和kzalloc()函数分配的物理内存也是连 ...
- java类的访问修饰符
1.java中外部类的访问修饰符有如下四种: public,默认,abstract,final // public,默认,abstract,final. public class Test1 {} c ...
- redis字符串数据类型基本概念和应用场景
基本概念:1.string类型是redis能与键关联的最简单的数据类型,它是memcached当中仅有的数据类型.2.redis的key名称也是一个字符串,当我们使用字符串类型作为其对应的值时,我们可 ...
- WebSocket协议探究(三):MQTT子协议
一 复习和目标 1 复习 Nodejs实现WebSocket服务器 Netty实现WebSocket服务器(附带了源码分析) Js api实现WebSocket客户端 注:Nodejs使用的Socke ...
- 数据仓库之抽取数据:通过openrowset执行存储过程
原文:数据仓库之抽取数据:通过openrowset执行存储过程 在做数据仓库时,最重要的就是ETL的开发,而在ETL开发中的第一步,就是要从原OLTP系统中抽取数据到过渡区中,再对这个过渡区中的数据进 ...
- Python练习_集合和深浅拷贝_day7
1. 1.作业 1.把列表中所有姓周的人的信息删掉(升级题:此题有坑, 请慎重): lst = ['周老二', '周星星', '麻花藤', '周扒皮'] 结果: lst = ['麻花藤'] 2.车牌区 ...
- Shell学习笔记:awk实现group by分组统计功能
日常部分数据以 txt 的文件格式提供,为避免入库之后再进行统计的麻烦,故学习 shell 进行处理,减少工作量. 1.样例数据 # test.txt YD5Gxxx|6618151|68254490 ...
- ASE19团队项目 beta阶段 model组 scrum3 记录
本次会议于12月4日,19时30分在微软北京西二号楼sky garden召开,持续20分钟. 与会人员:Jiyan He, Lei Chai, Linfeng Qi, Xueqing Wu, Yuto ...