Luogu P1330 封锁阳光大学 (黑白染色)
题意:
无向图,给一个顶点染色可以让他相邻的路不能通过,但是相邻顶点不能染色,求是否可以让所有的路不通,如果可以求最小染色数。
思路:
对于无向图中的每一个连通子图,都只有两种染色方法,或者染不了,直接搜即可,注意搜的姿势
代码:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<string>
#include<stack>
#include<queue>
#include<deque>
#include<set>
#include<vector>
#include<map>
#include<functional> #define fst first
#define sc second
#define pb push_back
#define mem(a,b) memset(a,b,sizeof(a))
#define lson l,mid,root<<1
#define rson mid+1,r,root<<1|1
#define lc root<<1
#define rc root<<1|1
#define lowbit(x) ((x)&(-x)) using namespace std; typedef double db;
typedef long double ldb;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> PI;
typedef pair<ll,ll> PLL; const db eps = 1e-;
const int mod = 1e9+;
const int maxn = 2e6+;
const int maxm = 2e6+;
const int inf = 0x3f3f3f3f;
const db pi = acos(-1.0);
vector<int>v[maxn];
int vis[maxn];
int c[maxn];
int sum[];
bool dfs(int i, int cl){
if(vis[i]==){
if(cl==c[i])return true;
else return false;
}
vis[i] = ;
c[i] = cl;
sum[cl]++;
int sz = v[i].size();
bool ans = true;
for(int j = ; j < sz; j++){
ans = ans && dfs(v[i][j], cl^);
}
return ans;
}
int main() {
int n, m;
scanf("%d %d", &n, &m);
for(int i = ; i < m; i++){
int x, y;
scanf("%d %d", &x, &y);
v[x].pb(y);
v[y].pb(x);
}
mem(vis, );
int ans = ;
for(int i = ; i < n; i++){
if(vis[i]==)continue;
sum[] = sum[] = ;
if(!dfs(i, )){
printf("Impossible");
return ;
}
ans += min(sum[], sum[]);
}
printf("%d", ans);
return ;
}
/*
4
2.
2 4
0 0 1 1
2 4
0 1 0 2
2 3
0 1 2
2 4
0 0 0 1
*/
Luogu P1330 封锁阳光大学 (黑白染色)的更多相关文章
- luogu P1330 封锁阳光大学 x
P1330 封锁阳光大学 题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹决定封锁阳光大学,不让曹刷街. 阳光大学的校园是一张由N个点构 ...
- P1330 封锁阳光大学(染色问题)
P1330 封锁阳光大学 题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹决定封锁阳光大学,不让曹刷街. 阳光大学的校园是一张由N个点构 ...
- 洛谷P1330 封锁阳光大学(二分图染色)
P1330 封锁阳光大学 题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹决定封锁阳光大学,不让曹刷街. 阳光大学的校园是一张由N个点构 ...
- 洛谷P1330封锁阳光大学[二分图染色]
题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹决定封锁阳光大学,不让曹刷街. 阳光大学的校园是一张由N个点构成的无向图,N个点之间由M ...
- P1330 封锁阳光大学[搜索+染色]
题目来源:洛谷 题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹决定封锁阳光大学,不让曹刷街. 阳光大学的校园是一张由N个点构成的无向图 ...
- P1330 封锁阳光大学 DFS+染色
题目链接:https://www.luogu.org/problemnew/show/P1330 这个题有意思,如果能想到染色,就会很简单,但若想不到就很麻烦 要想把一条边封锁,就必须且只能占据这条边 ...
- Luogu P1330 封锁阳光大学
这是一道神坑题! 刚开始看了题还以为是Tarjan(我也不知道Tarjan有什么用). 然后发现这是染色问题的模板题! 找到没有染色的点,然后将它涂成1(一共只有1,2两种颜色) 与它相连的点进行广搜 ...
- Luogu P1330 封锁阳光大学【Dfs】 By cellur925
题目传送门 这道题我们很容易去想到二分图染色,但是这个题好像又不是一个严格的二分图. 开始的思路:dfs每个点,扫与他相邻的每个点,如果没访问,染相反颜色:如果访问过,进行检查,如果不可行,直接结束程 ...
- 二分图染色模板(P1330 封锁阳光大学)
二分图染色模板(P1330 封锁阳光大学) 题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹决定封锁阳光大学,不让曹刷街. 阳光大学的校 ...
随机推荐
- docker概述和基本命令
命名空间 Docker使用一种称为namespaces提供隔离工作空间的技术来称为容器.当您运行容器时,Docker会为该容器创建一组 名称空间. 这些命名空间提供了一层隔离.容器的每个方面都在一个单 ...
- PHP 转化 Excel导入时间
$fixation = 25569; $fixationT = 24 * 60 * 60; $date = gmdate('Y-m-d H:i:s', ('excel导入的时间'- $fixation ...
- spring-boot第一章:快速开始
快速开始 创建pom.xml文件 <?xml version="1.0" encoding="UTF-8"?> <project xmlns= ...
- Vi的三种模式及其指令
第一部分:一般指令模式可用按键说明,光标移动,复制粘贴.搜索替代 移动光标的方法: 移动光标的方法 h或(左箭头) 光标向左移动一个字符 j或(下箭头) 光标向下移动一个字符 k或(上箭头) 光标向上 ...
- Java项目之客户信息管理软件
模拟实现基于文本界面的客户信息管理软件,该软件能够实现对客户对象的插入. 修改和删除(用数组实现),并能够打印客户明细表. 项目采用分级菜单方式.主菜单如下: “添加客户”的界面及操作过程如下所示: ...
- K8S基于ingress-nginx实现灰度发布
之前介绍过使用ambassador实现灰度发布,今天介绍如何使用ingre-nginx实现. 介绍 Ingress-Nginx 是一个K8S ingress工具,支持配置 Ingress Annota ...
- 一个命令解决linux重启nginx就丢失pid文件问题
sudo nginx -c /etc/nginx/nginx.conf
- scrapy在存储数据到json文件中时,中文变成为\u开头的字符串的处理方法
在settings.py文件中添加 FEED_EXPORT_ENCODING = 'utf-8'
- python 遍历文件夹下的所有文件
基础 import os # 遍历文件夹 def walkFile(file): for root, dirs, files in os.walk(file): # root 表示当前正在访问的文件夹 ...
- Qt Installer Framework翻译(3-3)
移除组件 下图说明了删除所有或某些已安装组件的默认工作流程: 本节使用在macOS上运行的Qt 5维护工具为例,来演示用户如何删除所有或部分选定组件. 移除所有组件 用户启动维护工具时,将打开&quo ...