luogu p1330封锁阳光大学
原题链接:
封锁阳光大学 - 洛谷https://www.luogu.com.cn/problem/P1330
题目描述
曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街。河蟹看到欢快的曹,感到不爽。河蟹决定封锁阳光大学,不让曹刷街。
阳光大学的校园是一张由 n 个点构成的无向图,n 个点之间由 m 条道路连接。每只河蟹可以对一个点进行封锁,当某个点被封锁后,与这个点相连的道路就被封锁了,曹就无法在这些道路上刷街了。非常悲剧的一点是,河蟹是一种不和谐的生物,当两只河蟹封锁了相邻的两个点时,他们会发生冲突。
询问:最少需要多少只河蟹,可以封锁所有道路并且不发生冲突。
输入格式
第一行两个正整数,表示节点数和边数。 接下来 m 行,每行两个整数 u,v,表示点 u 到点 v 之间有道路相连。
输出格式
仅一行如果河蟹无法封锁所有道路,则输出 Impossible
,否则输出一个整数,表示最少需要多少只河蟹。
输入输出样例
输入 #1复制
3 3 1 2 1 3 2 3
输出 #1复制
Impossible
输入 #2复制
3 2 1 2 2 3
输出 #2复制
1
说明/提示
【数据规模】
对于 100% 的数据,1≤n≤10e4,1≤m≤10e5,保证没有重边。
解题思路:
对于每一个联通块,判断是否能组成二分图,不能组成即无法封锁所有道路,如果能封锁所有道路,就让答案加上该联通块二分图中颜色较少的一份
AC代码:
#include<bits/stdc++.h>
using namespace std;
int used[10005];//标记数组,代表是否被染色过
int sum[2];//分别代表两种颜色数量
vector<int> edge[100005];//邻接表
int col[10005];//染色数组
int n,m,ans;
bool dfs(int x,int color)
{if(used[x])//如果已经被染色 {//如果颜色与原来一致就没问题,如果不一致即染色失败 if(col[x]==color) return true;return false;}used[x] = true;col[x] = color;sum[color]++; bool st = true;for(int i = 0;i<edge[x].size()&&st;++i){int v = edge[x][i];st = st&&dfs(v,1-color);}return st;
}
int main()
{cin>>n>>m;for(int i = 1;i<=m;++i){int x,y;cin>>x>>y;edge[x].push_back(y);edge[y].push_back(x); }for(int i = 1;i<=n;++i){if(used[i]) continue;sum[0] = sum[1] = 0;//初始化下总和数组 if(!dfs(i,0)){cout<<"Impossible"<<endl;return 0;}ans += min(sum[0],sum[1]);}cout<<ans<<endl;return 0;
}
luogu p1330封锁阳光大学相关推荐
- luogu P1330 封锁阳光大学
嘟嘟嘟 又刷了一道水题-- 很显然只要判断这个图是否是二分图就行了,判断方法就是染色.如果对于边(u->v),两个点颜色相同,那么就说明图中存在奇环,不是二分图. 统计答案的时候输出两种颜色较小 ...
- Luogu P1330 封锁阳光大学【Dfs】 By cellur925
题目传送门 这道题我们很容易去想到二分图染色,但是这个题好像又不是一个严格的二分图. 开始的思路:dfs每个点,扫与他相邻的每个点,如果没访问,染相反颜色:如果访问过,进行检查,如果不可行,直接结束程 ...
- P1330 封锁阳光大学
P1330 封锁阳光大学 题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹决定封锁阳光大学,不让曹刷街. 阳光大学的校园是一张由N个点构 ...
- 洛谷 P1330 封锁阳光大学 Label:染色问题
题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹决定封锁阳光大学,不让曹刷街. 阳光大学的校园是一张由N个点构成的无向图,N个点之间由M ...
- 洛谷P1330 封锁阳光大学
题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹决定封锁阳光大学,不让曹刷街. 阳光大学的校园是一张由N个点构成的无向图,N个点之间由M ...
- 洛谷 P1330 封锁阳光大学题解
题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹决定封锁阳光大学,不让曹刷街. 阳光大学的校园是一张由N个点构成的无向图,N个点之间由M ...
- 洛谷 P1330 封锁阳光大学 二分图染色
题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹决定封锁阳光大学,不让曹刷街. 阳光大学的校园是一张由N个点构成的无向图,N个点之间由M ...
- 【C++】洛谷P1330 封锁阳光大学
封锁阳光大学 题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹决定封锁阳光大学,不让曹刷街. 阳光大学的校园是一张由 nnn 个点构成的 ...
- 黑白染色——封锁阳光大学
所谓黑白染色,就是指用bfs或dfs依次遍历每一个点,同时进行染色,一黑一白,如果遇到已经染过色的点并且点的颜色和即将要染的颜色冲突,就说明无法进行二分,无法满足染色.大概就是这样的. 下面我们看一道 ...
- 【并查集】封锁阳光大学(P1330)
正题 P1330 题目大意 给你一张无向图,问你最少选择多少个点,使得每一条边都有且只有一个端点被选择 解题思路 每一条边只能选一个点,那么考虑对这个图黑白染色 可以用扩展域并查集判二分图,然后两边的 ...
最新文章
- ASP.NET Core的身份认证框架IdentityServer4(4)- 支持的规范
- print在python2和python3的区别_Python2和Python3中print的不同点
- 封装jquery的ajax,便于加载等待提示框
- centos6 进入命令行_CentOS6.8设置开机直接进入命令行模式
- Spring Boot : 自定义 Starter
- Linux学习笔记---移植官方uboot步骤(二)
- Chronos首页、文档和下载 - 作业调度器 - 开源中国社区
- 线切割常用专用编程软件下载
- 我买的开发板——大虾网DX32(for STM32)
- EDG夺冠刷屏背后,是正在发力的B站直播
- 如何获取http://123123123 双斜杠后面的值?
- 四万字长文说operator new operator delete
- Java实现蓝桥杯二项式的系数规律
- XXE实体注入漏洞详解
- 钓鱼网站盯上加油卡充值
- 证券行业大数据安全简述
- Vue3.2 使用 汉字转拼音的插件pinyin-pro 库
- 锤子官网html格式,锤子便签
- Cisco Packet Tracer 4.7.2 连接物理层
- 什么是网关模块 工业物联网以太网网关WiFi模块的选型
热门文章
- no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.
- 讲解如何在HTML中添加背景图片?
- ERC20 智能合约整数溢出系列漏洞披露
- 怎么做好淘宝客推广?
- 如何彻底关闭Windows更新
- 用flutter写一个抖音是什么体验?
- wingftpserver完整配置免费ftp站点(指南)
- 解决Outlook搜索功能的搜索结果不完整问题
- 嗖嗖移动业务大厅——功能分析
- Win10家庭版安装软件时提示“为了对电脑进行保护,已经阻止此应用”