luogu1330_封锁阳光大学 图的遍历
解释:(转自洛谷题解)
首先,肯定要明确一点,那就是这个图是不一定联通的。于是,我们就可以将整张图切分成许多分开的连同子图来处理。然而最重要的事情是:如何处理一个连通图?
乍看下去,似乎无从下手,因为方案好像有很多种,根本就枚举不完。但是,关键要注意到题目中重要的两个条件,我们把它抽象成这两个要素:
①每一条边所连接的点中,至少要有一个被选中。
②每一条边所连接的两个点,不能被同时选中。
由此,可以推断出:每一条边都有且仅有一个被它所连接的点被选中。
又因为我们要处理的是一个连通图。所以,对于这一个图的点的选法,可以考虑到相邻的点染成不同的颜色。
于是,对于一个连通图,要不就只有两种选法(因为可以全部选染成一种色的,也可以全部选染成另一种色的),要不就是impossible!
所以,我们只需要找到每一个子连通图,对它进行黑白染色,然后取两种染色中的最小值,然后最后汇总,就可以了。
另外,要判断impossible,只需要加一个used数组,记录已经遍历了哪些点。如果重复遍历一个点,且与上一次的颜色不同,则必然是impossible的。、
my code:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define rep(i, a, b) for (int i = a; i <= b; ++i) const int N = 1e5 + ; int n, m, vis[N], cnt[], ans; bool used[N]; vector<int> e[N]; void dfs(int u, int col) {
if (!used[u]) {
used[u] = ;
vis[u] = col;
cnt[col]++;
for (auto v : e[u]) {
dfs(v, - col);
}
}
else if (col != vis[u]) {
puts("Impossible");
exit();
}
} int main() {
scanf("%d%d", &n, &m); rep(i, , m) {
int u, v;
scanf("%d%d", &u, &v);
e[u].push_back(v);
e[v].push_back(u);
} rep(i, , n) if (!used[i]) {
cnt[] = cnt[] = ;
dfs(i, );
ans += min(cnt[], cnt[]);
} printf("%d\n", ans); return ;
}
luogu1330_封锁阳光大学 图的遍历的更多相关文章
- 洛谷P1330封锁阳光大学——图的染色
		
题目:https://www.luogu.org/problemnew/show/P1330 此题我最初没有思路,暴搜而爆0: 然后才明白关键在于把所有点分成两类,因为可以发现点之间的关系是存在两两对 ...
 - 洛谷——P1330 封锁阳光大学
		
P1330 封锁阳光大学 题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹决定封锁阳光大学,不让曹刷街. 阳光大学的校园是一张由N个点构 ...
 - 洛谷P1330 封锁阳光大学 [图论,染色]
		
题目传送门 封锁阳光大学 题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹决定封锁阳光大学,不让曹刷街. 阳光大学的校园是一张由N个点构 ...
 - 洛谷 P1330 封锁阳光大学题解
		
题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹决定封锁阳光大学,不让曹刷街. 阳光大学的校园是一张由N个点构成的无向图,N个点之间由M ...
 - P1330 封锁阳光大学[搜索+染色]
		
题目来源:洛谷 题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹决定封锁阳光大学,不让曹刷街. 阳光大学的校园是一张由N个点构成的无向图 ...
 - 洛谷P1330  封锁阳光大学
		
题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹决定封锁阳光大学,不让曹刷街. 阳光大学的校园是一张由N个点构成的无向图,N个点之间由M ...
 - 洛谷 P1330 封锁阳光大学 Label:染色问题
		
题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹决定封锁阳光大学,不让曹刷街. 阳光大学的校园是一张由N个点构成的无向图,N个点之间由M ...
 - Codevs 1535 封锁阳光大学
		
1535 封锁阳光大学 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 钻石 Diamond 题目描述 Description 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大 ...
 - P1330 封锁阳光大学(染色问题)
		
P1330 封锁阳光大学 题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹决定封锁阳光大学,不让曹刷街. 阳光大学的校园是一张由N个点构 ...
 
随机推荐
- C# 死锁 TaskCompletionSource
			
在异步转同步时,使用不当容易造成死锁(程序卡死) 看如下案例: 有一个异步方法 private static async Task TestAsync() { Debug.WriteLine(&quo ...
 - RT-Thread的CPU占用率查看
			
今天看到朋友的博客,他在描述RT-Thread钩子函数时,简单提了下RT-Thread中CPU占用,没有具体描述,所以我在这里做下补充. RT-Thread查看CPU使用率时,我知道的有这种方法. 大 ...
 - .gitignore 的简单实用
			
a: 在工作目录下右键点击使用git命令行(GitBash) b: 输入 touch .gitignore 命令,此时会在工作目录下生成一个“.gitignore”的文本文件 注:touch在git里 ...
 - cookie 和 session 设置
			
cookie: 保存在浏览器上的一组键值对, 是由服务器让浏览器进行设置的 下次浏览器访问的时候会携带cookie. request是客户端请求, response是服务端响应. 读取客户端的cook ...
 - kuangbin专题 专题一 简单搜索 迷宫问题 POJ - 3984
			
题目链接:https://vjudge.net/problem/POJ-3984 这个题目,emm,上代码,看的估计应该是刚开始接触搜索的,我带点注释,你能慢慢理解. #include <ios ...
 - linux学习书籍推荐《鸟哥的Linux私房菜》下载
			
下载地址:点我 <鸟哥的Linux私房菜:基础学习篇>是具有知名度的Linux入门书<鸟哥的Linux私房菜基础学习篇>的最新版,全面而详细地介绍了Linux操作系统.< ...
 - Java项目实例之---学生选课(面向对象复习)
			
学生选课(面向对象复习) 设计一个学生选课的程序,分别有学生类(Student)和课程类(Course) 学生类的属性有:学号(String),姓名(String),性别(char),所选科目(Cou ...
 - 洛谷P2790 ccj与zrz之积木问题 题解
			
题目链接:https://www.luogu.org/problemnew/show/P2790 这题码量稍有点大... 分析: 这道题模拟即可.因为考虑到所有的操作vector可最快捷的实现,所以数 ...
 - NOIP2018初赛题解 提高组
 - cve-2018-2893 WebLogic
			
最近爆出来了新的漏洞cve-2018-2893 一.背景介绍 WebLogic是美国Oracle公司出品的一个Application Server,确切的说是一个基于JAVAEE架构的中间件,WebL ...