封锁阳光大学

题目描述:
曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街。河蟹看到欢快的曹,感到不爽。河蟹决定封锁阳光大学,不让曹刷街。
阳光大学的校园是一张由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;
}

封锁阳光大学(染色)相关推荐

  1. 洛谷 P1330 封锁阳光大学 Label:染色问题

    题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹决定封锁阳光大学,不让曹刷街. 阳光大学的校园是一张由N个点构成的无向图,N个点之间由M ...

  2. 洛谷 P1330 封锁阳光大学 二分图染色

    题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹决定封锁阳光大学,不让曹刷街. 阳光大学的校园是一张由N个点构成的无向图,N个点之间由M ...

  3. 黑白染色——封锁阳光大学

    所谓黑白染色,就是指用bfs或dfs依次遍历每一个点,同时进行染色,一黑一白,如果遇到已经染过色的点并且点的颜色和即将要染的颜色冲突,就说明无法进行二分,无法满足染色.大概就是这样的. 下面我们看一道 ...

  4. 洛谷P1330 封锁阳光大学

    题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹决定封锁阳光大学,不让曹刷街. 阳光大学的校园是一张由N个点构成的无向图,N个点之间由M ...

  5. P1330 封锁阳光大学

    P1330 封锁阳光大学 题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹决定封锁阳光大学,不让曹刷街. 阳光大学的校园是一张由N个点构 ...

  6. 洛谷 P1330 封锁阳光大学题解

    题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹决定封锁阳光大学,不让曹刷街. 阳光大学的校园是一张由N个点构成的无向图,N个点之间由M ...

  7. 【C++】洛谷P1330 封锁阳光大学

    封锁阳光大学 题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹决定封锁阳光大学,不让曹刷街. 阳光大学的校园是一张由 nnn 个点构成的 ...

  8. luogu P1330 封锁阳光大学

    嘟嘟嘟 又刷了一道水题-- 很显然只要判断这个图是否是二分图就行了,判断方法就是染色.如果对于边(u->v),两个点颜色相同,那么就说明图中存在奇环,不是二分图. 统计答案的时候输出两种颜色较小 ...

  9. 【并查集】封锁阳光大学(P1330)

    正题 P1330 题目大意 给你一张无向图,问你最少选择多少个点,使得每一条边都有且只有一个端点被选择 解题思路 每一条边只能选一个点,那么考虑对这个图黑白染色 可以用扩展域并查集判二分图,然后两边的 ...

  10. Luogu P1330 封锁阳光大学【Dfs】 By cellur925

    题目传送门 这道题我们很容易去想到二分图染色,但是这个题好像又不是一个严格的二分图. 开始的思路:dfs每个点,扫与他相邻的每个点,如果没访问,染相反颜色:如果访问过,进行检查,如果不可行,直接结束程 ...

最新文章

  1. (每日一题)P4128 [SHOI2006] 有色图(文末有色图!)(Polya定理)(超级详细,清晰易懂)
  2. FastJson乱序问题
  3. Android之TableLayout表格布局
  4. EL表达式中获取List中某个元素的值
  5. oracle 存储怎么使用,Oracle存储过程中如何使用数组(附范例)
  6. Ping, IPConfig, Format, Netstat, etc. Not Recognized as Commands
  7. eclipse中图片大小用什么单位_建筑工程行业中各个单位都是什么样的关系?
  8. spring boot mybatis拦截器
  9. 置信区间估计 预测区间估计_估计,预测和预测
  10. OpenCV人脸检测并把图片写成avi视频
  11. c++求矩阵的秩_利用Python矩阵求逆、特征值及特征向量
  12. C语言符号优先级速查
  13. 仿照支付宝等——自动获取短信中的验证码
  14. 【科研绘图】用PPT进行科研用图的图片预处理
  15. VBA完整学习笔记1-39集(共60集)
  16. 锁定计算机提示字母k但无用,我的键盘字母GH数字键全按不起
  17. C-11 Problem H: 开宝箱2
  18. (转)sqlserver 数据恢复方法
  19. 用 C++ 示例解释 UML 类图
  20. TiDB 在汽车之家818台网互动项目中的应用

热门文章

  1. Java面向对象 - String类
  2. 【愚公系列】2022年10月 微信小程序-电商项目-商品详情页面说明和商品导航
  3. 抖音sdk,抖音开发api接口
  4. Error parsing INI config file: the argument ('true??') for option 'logappend' is invalid.
  5. 《实变函数简明教程》,第三章:可测函数,连续函数复合可测函数是可测函数
  6. 【数据分析】销售案例——用户购买频次
  7. Index.ANALYZED in lucene4 is deprecated
  8. ubuntu格式化硬盘
  9. 2022茶艺师(初级)试题及在线模拟考试
  10. 【盘点】2014年跨境进口型电商十大模式