题目描述

曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街。河蟹看到欢快的曹,感到不爽。河蟹决定封锁阳光大学,不让曹刷街。

阳光大学的校园是一张由N个点构成的无向图,N个点之间由M条道路连接。每只河蟹可以对一个点进行封锁,当某个点被封锁后,与这个点相连的道路就被封锁了,曹就无法在与这些道路上刷街了。非常悲剧的一点是,河蟹是一种不和谐的生物,当两只河蟹封锁了相邻的两个点时,他们会发生冲突。

询问:最少需要多少只河蟹,可以封锁所有道路并且不发生冲突。

输入输出格式
输入格式:

第一行:两个整数N,M

接下来M行:每行两个整数A,B,表示点A到点B之间有道路相连。
输出格式:
仅一行:如果河蟹无法封锁所有道路,则输出“Impossible”,否则输出一个整数,表示最少需要多少只河蟹。

输入输出样例

输入样例#1:
3 3
1 2
1 3
2 3
输出样例#1:
Impossible

输入样例#2:
3 2
1 2
2 3
输出样例#2:
1
说明

【数据规模】

1<=N<=10000,1<=M<=100000,任意两点之间最多有一条道路。

思路:

有题目很明显可以看出满足题目要求的是二分图,一部分是有河蟹站的,另一部分没有两个部分之间没有边相连接。接下来就是判断输入的图是否是二分图了,这里用dfs染色法

代码:

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<string>
#include<vector>
#include<stack>
#include<bitset>
#include<cstdlib>
#include<cmath>
#include<set>
#include<list>
#include<deque>
#include<map>
#include<queue>
using namespace std;
typedef long long ll;
const double PI = acos(-1.0);
const double eps = 1e-6;
const int INF = 1000000000;
const int maxn = 123456;
int T,n,m;
int t1,t2;
int flag,ans;vector<int>e[maxn];
int vis[maxn];int dfs(int u)
{for(int i=0;i<e[u].size();i++){if(vis[e[u][i]]==vis[u])return 0;if(!vis[e[u][i]]){vis[e[u][i]]=-vis[u];if(vis[e[u][i]]==1)t1++;elset2++;if(!dfs(e[u][i]))return 0;}}return 1;
}int main()
{flag=0;scanf("%d%d", &n, &m);for (int i = 0; i < m; i++){int u, v;scanf("%d%d", &u, &v);e[u].push_back(v);e[v].push_back(u);}for (int i = 1; i <= n; i++){if (vis[i] == 0){vis[i]=1;t1=1,t2=0;if (!dfs(i)){flag=1;break;}ans+=min(t1,t2);}}if (flag){printf("Impossible\n");}else{printf("%d\n",ans);}return 0;
}

洛谷p1330 封锁阳光大学-二分图染色相关推荐

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

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

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

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

  3. 洛谷P1330 封锁阳光大学

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

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

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

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

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

  6. 洛谷P1330封锁阳关大学口胡实况

    原题目见洛谷(https://www.luogu.org/problemnew/show/P1330) 这道题如果仔细想想的话其实河蟹的分布就是对这张图进行黑白染色,且相邻的两点要染成不同的颜色,如果 ...

  7. P1330 封锁阳光大学

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

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

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

  9. luogu P1330 封锁阳光大学

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

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

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

最新文章

  1. 刻意练习:LeetCode实战 -- Task19. 相同的树
  2. Python学习笔记__13.2章 requests
  3. 辞职后五险一金的处理方式
  4. MySQL应用异常问题解决
  5. Cloud for Customer Restriction and Exclusion Product Lists
  6. 对象必须实现 iconvertible。_java面向对象最全入门笔记(通俗易懂,适合初学者)...
  7. window下搭建Python3.7+selenium3.1.1+pycharm环境
  8. [转] boost库的Singleton的实现以及static成员的初始化问题
  9. 博客园的祥和需要大家共同努力
  10. 知道吗?BAT去年在KDD上作为第一单位发表了12篇文章!(内附每篇文章解读)...
  11. springboot 扫描jar包中bean_详解Spring Boot的Component Scan原理
  12. tensorflow reduction_indices理解
  13. 隐藏win11任务栏时间,开启专注模式
  14. 什么是外网IP、内网IP?
  15. XML与java对象互转文档
  16. Unity3D 实现阴阳师 画符
  17. Linux下解决cannot connect to X server :0.0 问题
  18. 翻译网Gengo获1200万美元投资,价值何在
  19. 常用的六大类型测试工具
  20. 儿童学计算机编程好处,儿童编程课学了有好处吗?4大优势家长要知道

热门文章

  1. Samsung SENS R60plus
  2. 超详细的Mac重装系统教程!让重装系统变得简单起来!
  3. 怎么查看linux系统硬盘,查看Linux磁盘空间的八大方法
  4. 如何搭建一个可以搜题的微信公众号?完整教程
  5. 使用ScanPort、SuperScan、Nmap进行端口扫描
  6. Loadrunner:管理员权限启动报错“win10为了对电脑进行保护,已经阻止此应用”
  7. 关于PCDet 训练中的 road plane问题
  8. 目标检测--轻量级网络(截至2022-04-21)
  9. 前端bugger 后端debug 介绍系统内部逻辑 压测新增订单接口 tps上不去 ,oom ,常见性能问题 ,性能分析思路
  10. Python实现Excel表格数据去重