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

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

 

思路:

  bfs染色;

  如果当前点能通往已染色的点则不能完成;

  图不一定联通;

 

来,上代码:

#include 
#include
#include
#include
#include
using namespace std;#define maxn 10005#define maxm 200005struct EdgeType { int v,e;};struct EdgeType edge[maxm];int n,m,cnt,head[maxn],dis[maxn],ans;bool if_[maxn],ifo;inline void in(int &now){ register int if_z=1;now=0; register char Cget=getchar(); while(Cget>'9'||Cget<'0') { if(Cget=='-') if_z=-1; Cget=getchar(); } while(Cget>='0'&&Cget<='9') { now=now*10+Cget-'0'; Cget=getchar(); } now*=if_z;}int main(){ in(n),in(m);int u,v; for(int i=1;i<=m;i++) { in(u),in(v); edge[++cnt].v=v,edge[cnt].e=head[u],head[u]=cnt; edge[++cnt].v=u,edge[cnt].e=head[v],head[v]=cnt; } for(int i=1;i<=n;i++) { if(!if_[i]) { int tot=1,pos=1; queue
que;que.push(i),if_[i]=true; while(!que.empty()) { int now=que.front();que.pop(); for(int i=head[now];i;i=edge[i].e) { if(!if_[edge[i].v]) { tot++; que.push(edge[i].v); if_[edge[i].v]=true; dis[edge[i].v]=dis[now]^1; if(dis[now]) pos++; } else { if(dis[edge[i].v]==dis[now]) ifo=true; } } } ans+=min(tot-pos,pos); } } if(ifo) cout<<"Impossible"; else cout<

 

转载于:https://www.cnblogs.com/IUUUUUUUskyyy/p/6711056.html

你可能感兴趣的文章
lvs
查看>>
个人网站如何使用支付宝收款实现
查看>>
我的友情链接
查看>>
XenServer上虚拟机密码恢复
查看>>
浏览器获取地理方位
查看>>
C语言学习笔记—08-02
查看>>
Linux 信号signal处理机制
查看>>
mybatis-使用set动态拼接sql
查看>>
javascript获取浏览器相关信息
查看>>
配置datanode主机名slaves
查看>>
MySQL5.7 my.cnf常用参数、调优参数及常用语句
查看>>
apache mina 2 Chapter 2 - Basics
查看>>
javascript面向对象编程幻灯片效果
查看>>
JQuery层次选择器
查看>>
数据库密码管理基本常识
查看>>
Android 配置
查看>>
android app的类响应式设计【半月谈投稿】
查看>>
Android 应用的动画实践--View Animation篇
查看>>
Oracle 11g 归档模式基本操作
查看>>
安装APK文件到Android虚拟机
查看>>