原题链接:

封锁阳光大学 - 洛谷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封锁阳光大学相关推荐

  1. luogu P1330 封锁阳光大学

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

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

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

  3. P1330 封锁阳光大学

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

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

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

  5. 洛谷P1330 封锁阳光大学

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. ASP.NET Core的身份认证框架IdentityServer4(4)- 支持的规范
  2. print在python2和python3的区别_Python2和Python3中print的不同点
  3. 封装jquery的ajax,便于加载等待提示框
  4. centos6 进入命令行_CentOS6.8设置开机直接进入命令行模式
  5. Spring Boot : 自定义 Starter
  6. Linux学习笔记---移植官方uboot步骤(二)
  7. Chronos首页、文档和下载 - 作业调度器 - 开源中国社区
  8. 线切割常用专用编程软件下载
  9. 我买的开发板——大虾网DX32(for STM32)
  10. EDG夺冠刷屏背后,是正在发力的B站直播
  11. 如何获取http://123123123 双斜杠后面的值?
  12. 四万字长文说operator new operator delete
  13. Java实现蓝桥杯二项式的系数规律
  14. XXE实体注入漏洞详解
  15. 钓鱼网站盯上加油卡充值
  16. 证券行业大数据安全简述
  17. Vue3.2 使用 汉字转拼音的插件pinyin-pro 库
  18. 锤子官网html格式,锤子便签
  19. Cisco Packet Tracer 4.7.2 连接物理层
  20. 什么是网关模块 工业物联网以太网网关WiFi模块的选型

热门文章

  1. no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.
  2. 讲解如何在HTML中添加背景图片?
  3. ERC20 智能合约整数溢出系列漏洞披露
  4. 怎么做好淘宝客推广?
  5. 如何彻底关闭Windows更新
  6. 用flutter写一个抖音是什么体验?
  7. wingftpserver完整配置免费ftp站点(指南)
  8. 解决Outlook搜索功能的搜索结果不完整问题
  9. 嗖嗖移动业务大厅——功能分析
  10. Win10家庭版安装软件时提示“为了对电脑进行保护,已经阻止此应用”