封锁阳光大学(染色)
封锁阳光大学
题目描述:
曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街。河蟹看到欢快的曹,感到不爽。河蟹决定封锁阳光大学,不让曹刷街。
阳光大学的校园是一张由N个点构成的无向图,N个点之间由M条道路连接。每只河蟹可以对一个点进行封锁,当某个点被封锁后,与这个点相连的道路就被封锁了,曹就无法在与这些道路上刷街了。非常悲剧的一点是,河蟹是一种不和谐的生物,当两只河蟹封锁了相邻的两个点时,他们会发生冲突。
询问:最少需要多少只河蟹,可以封锁所有道路并且不发生冲突。
输入输出格式
输入格式:
第一行:两个整数N,M
接下来M行:每行两个整数A,B,表示点A到点B之间有道路相连。
输出格式:
仅一行:如果河蟹无法封锁所有道路,则输出“Impossible”,否则输出一个整数,表示最少需要多少只河蟹。
输入输出样例
输入样例:
【输入样例1】
3 3
1 2
1 3
2 3
【输入样例2】
3 2
1 2
2 3
输出样例:
【输出样例1】
Impossible
【输出样例2】
1
说明
【数据规模】
1<=N<=10000,1<=M<=100000,任意两点之间最多有一条道路。
思路:
e[i][0]是记录关于点i的边数,e[i][j]是关于i点的第j条边连向哪个点。
然后开始DFS,从源点开始拓展,将源点染色为1,与源点相连的点(下面称为二层点,以此类推)染色为2,把与二层点相连的染色为1,与三层点相连的点染色为2,就是不断的121212……当然,这个时候,如果你发现,从一个被染色为1的点拓展,发现一个颜色也为1的点,这就无法染色,也就是题目中的Impossible。开变量累计图中你染色为1的点和染色为2的点的个数,选择小的累加到ans里面。
!注意,这里的图不是全连通的。每个连通图分开染色,分开累加,而不是一次性地输出所有连通图中的色1和色2的较小值。
#include<iostream>
#include<cstdlib>
using namespace std;
const int maxn=10010;
int n,m,tot_1,tot_2,ans,e[maxn][300];
int f[maxn];
void color(int u)
{for(int i=1;i<=e[u][0];i++){if(f[u]==f[e[u][i]]){cout<<"Impossible";exit(0);}if(!f[e[u][i]]) {f[e[u][i]]=3-f[u];if(f[e[u][i]]==1)tot_1++;else tot_2++;color(e[u][i]);}}
}
int main()
{int x,y; cin>>n>>m;for(int i=1;i<=m;i++){cin>>x>>y;e[x][++e[x][0]]=y;e[y][++e[y][0]]=x;}for(int i=1;i<=n;i++)if(!f[i]){f[i]=1;tot_1=1;tot_2=0;color(i);tot_1=min(tot_1,tot_2);ans+=tot_1;}cout<<ans;return 0;
}
封锁阳光大学(染色)相关推荐
- 洛谷 P1330 封锁阳光大学 Label:染色问题
题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹决定封锁阳光大学,不让曹刷街. 阳光大学的校园是一张由N个点构成的无向图,N个点之间由M ...
- 洛谷 P1330 封锁阳光大学 二分图染色
题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹决定封锁阳光大学,不让曹刷街. 阳光大学的校园是一张由N个点构成的无向图,N个点之间由M ...
- 黑白染色——封锁阳光大学
所谓黑白染色,就是指用bfs或dfs依次遍历每一个点,同时进行染色,一黑一白,如果遇到已经染过色的点并且点的颜色和即将要染的颜色冲突,就说明无法进行二分,无法满足染色.大概就是这样的. 下面我们看一道 ...
- 洛谷P1330 封锁阳光大学
题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹决定封锁阳光大学,不让曹刷街. 阳光大学的校园是一张由N个点构成的无向图,N个点之间由M ...
- P1330 封锁阳光大学
P1330 封锁阳光大学 题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹决定封锁阳光大学,不让曹刷街. 阳光大学的校园是一张由N个点构 ...
- 洛谷 P1330 封锁阳光大学题解
题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹决定封锁阳光大学,不让曹刷街. 阳光大学的校园是一张由N个点构成的无向图,N个点之间由M ...
- 【C++】洛谷P1330 封锁阳光大学
封锁阳光大学 题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹决定封锁阳光大学,不让曹刷街. 阳光大学的校园是一张由 nnn 个点构成的 ...
- luogu P1330 封锁阳光大学
嘟嘟嘟 又刷了一道水题-- 很显然只要判断这个图是否是二分图就行了,判断方法就是染色.如果对于边(u->v),两个点颜色相同,那么就说明图中存在奇环,不是二分图. 统计答案的时候输出两种颜色较小 ...
- 【并查集】封锁阳光大学(P1330)
正题 P1330 题目大意 给你一张无向图,问你最少选择多少个点,使得每一条边都有且只有一个端点被选择 解题思路 每一条边只能选一个点,那么考虑对这个图黑白染色 可以用扩展域并查集判二分图,然后两边的 ...
- Luogu P1330 封锁阳光大学【Dfs】 By cellur925
题目传送门 这道题我们很容易去想到二分图染色,但是这个题好像又不是一个严格的二分图. 开始的思路:dfs每个点,扫与他相邻的每个点,如果没访问,染相反颜色:如果访问过,进行检查,如果不可行,直接结束程 ...
最新文章
- (每日一题)P4128 [SHOI2006] 有色图(文末有色图!)(Polya定理)(超级详细,清晰易懂)
- FastJson乱序问题
- Android之TableLayout表格布局
- EL表达式中获取List中某个元素的值
- oracle 存储怎么使用,Oracle存储过程中如何使用数组(附范例)
- Ping, IPConfig, Format, Netstat, etc. Not Recognized as Commands
- eclipse中图片大小用什么单位_建筑工程行业中各个单位都是什么样的关系?
- spring boot mybatis拦截器
- 置信区间估计 预测区间估计_估计,预测和预测
- OpenCV人脸检测并把图片写成avi视频
- c++求矩阵的秩_利用Python矩阵求逆、特征值及特征向量
- C语言符号优先级速查
- 仿照支付宝等——自动获取短信中的验证码
- 【科研绘图】用PPT进行科研用图的图片预处理
- VBA完整学习笔记1-39集(共60集)
- 锁定计算机提示字母k但无用,我的键盘字母GH数字键全按不起
- C-11 Problem H: 开宝箱2
- (转)sqlserver 数据恢复方法
- 用 C++ 示例解释 UML 类图
- TiDB 在汽车之家818台网互动项目中的应用
热门文章
- Java面向对象 - String类
- 【愚公系列】2022年10月 微信小程序-电商项目-商品详情页面说明和商品导航
- 抖音sdk,抖音开发api接口
- Error parsing INI config file: the argument ('true??') for option 'logappend' is invalid.
- 《实变函数简明教程》,第三章:可测函数,连续函数复合可测函数是可测函数
- 【数据分析】销售案例——用户购买频次
- Index.ANALYZED in lucene4 is deprecated
- ubuntu格式化硬盘
- 2022茶艺师(初级)试题及在线模拟考试
- 【盘点】2014年跨境进口型电商十大模式