博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
洛谷——P1330 封锁阳光大学
阅读量:5911 次
发布时间:2019-06-19

本文共 1881 字,大约阅读时间需要 6 分钟。

P1330 封锁阳光大学

题目描述

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

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

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

输入输出格式

输入格式:

 

第一行:两个整数N,M

接下来M行:每行两个整数A,B,表示点A到点B之间有道路相连。

 

输出格式:

 

仅一行:如果河蟹无法封锁所有道路,则输出“Impossible”,否则输出一个整数,表示最少需要多少只河蟹。

 

输入输出样例

输入样例#1:
 
3 31 21 32 3
输出样例#1:
 
Impossible
输入样例#2:
 
3 21 22 3
输出样例#2:
 
1

说明

【数据规模】

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

 

dfs+二分图染色

由于一条边相连的两个点不可以染成一个颜色,这样这个题就变成了一个二分图的一道题,我们对图进行黑白染色,如果这个图不是二分图,那么我们一定会把相邻的两个点染成相同的颜色,这个时候即为无法封锁的情况。

由于图不一定连通,那么我们对整张图进行遍历,然后判断每一个连通子图,我们答案累加的时候加上黑白棋盘中最少的

 

#include
#include
#include
#include
#define N 1010000using namespace std;bool vis[N],flag;int n,m,x,y,tot,ans,to[N],clo[N],sum[10],nextt[N],head[N];int read(){ int x=0,f=1; char ch=getchar(); while(ch<'0'||ch>'9'){
if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar(); return x*f;}int add(int x,int y){ ++tot;to[tot]=y,nextt[tot]=head[x];head[x]=tot; ++tot;to[tot]=x;nextt[tot]=head[y];head[y]=tot;}void dfs(int x){ if(flag) return ; for(int i=head[x];i;i=nextt[i]) { int t=to[i];vis[t]=true; if(clo[x]==clo[t]) { flag=true; return ; } if(!clo[t]) { clo[t]=3-clo[x]; sum[clo[t]]++,dfs(t); } }}int main(){ n=read(),m=read(); for(int i=1;i<=m;i++) x=read(),y=read(),add(x,y); for(int i=1;i<=n;i++) if(!vis[i]) { clo[i]=1,sum[1]=1,sum[2]=0;dfs(i); if(flag) { printf("Impossible"); return 0; } ans+=min(sum[1],sum[2]); } printf("%d",ans); return 0;}

 

转载于:https://www.cnblogs.com/z360/p/8227593.html

你可能感兴趣的文章
PhysicsBasedAnimation学习
查看>>
java并发编程之:线程共享数据的方式
查看>>
ES内部分片处理机制——Segment
查看>>
IDEA Maven 创建Java Spring MVC Web项目
查看>>
笨方法学python IV
查看>>
软件开发周期,你们是否也是这样子的呢?
查看>>
android setResut intent ==null?
查看>>
为现有系统新增服务器
查看>>
Oracle - 创建表空间
查看>>
驰骋工作流引擎表单设计控件-关系类控件-明细表(3)
查看>>
Dubbo配置方式详解
查看>>
使用Shiro实现权限验证
查看>>
Java中数组、集合、链表、队列的数据结构和优缺点和他们之间的区别
查看>>
谈谈springmvc的ResponseBodyAdvice
查看>>
springboot报编译失败 Compilation failure
查看>>
Ubuntu下su模式认证失败的问题解决
查看>>
mysqld error(一)
查看>>
Javascript延时函数
查看>>
UML类图关系大全
查看>>
Ant编译Hadoop 1.0.3的eclipse-plugin插件包
查看>>