[BFS]JZOJ 4672 Graph Coloring
Description
找到一种步数最小的方案,使得所有边的颜色相同。
Input
接下来m行描述边,第i行ui,vi,ci,代表ui有一条颜色为ci的边与vi相连(ci是B或者是R),B代表蓝色,R代表红色。数据保证没有自环的边。
Output
Sample Input
输入1: 3 3 1 2 B 3 1 R 3 2 B输入3: 4 5 1 2 R 1 3 R 2 3 B 3 4 B 1 4 B
Sample Output
输出1: 1输出3: -1
Data Constraint
分析
非常简单的染色问题
我们分两次BFS,一次选择把全部边变成红色,另一次显然
然后一个点显然变两次是一样的,所以我们当边的颜色是否与当前选择的颜色不同给连接的点染色,若已染则判断是否相同或不同
#include <iostream> #include <cstdio> #include <queue> #include <memory.h> using namespace std; const int N=1e5+10;; struct Edge {int u,v,nx,type; }g[2*N]; int cnt,list[N]; int n,m; bool b[N],vis[N]; int ok,ans=2147483647,lans[2];void Add(int u,int v,char type) {g[++cnt]=(Edge){u,v,list[u],type=='R'?1:0};list[u]=cnt;g[++cnt]=(Edge){v,u,list[v],type=='R'?1:0};list[v]=cnt; }int BFS(int v0,int same) {queue<int> q;while (!q.empty()) q.pop();q.push(v0);vis[v0]=1;lans[1]++;while (!q.empty()) {int u=q.front();q.pop();for (int i=list[u];i;i=g[i].nx) {if (!vis[g[i].v]) {b[g[i].v]=g[i].type==same?b[u]:(b[u]^1);lans[b[u]^(g[i].type==same)]++;q.push(g[i].v);vis[g[i].v]=1;}elseif (g[i].type==same&&b[u]!=b[g[i].v]||g[i].type!=same&&b[u]==b[g[i].v]) return -1;}}return min(lans[0],lans[1]); }int main() {scanf("%d%d",&n,&m);for (int i=1;i<=m;i++) {int u,v;char c;scanf("%d%d",&u,&v);scanf("%c",&c);while (c!='R'&&c!='B') scanf("%c",&c);Add(u,v,c);}for (int i=0;i<2;i++) {bool p=1;int cans=0,nans=0;memset(b,0,sizeof b);memset(vis,0,sizeof vis);for (int j=1;j<=n;j++) if (!vis[j]) {lans[0]=lans[1]=0;cans=BFS(j,i);if (cans==-1) {p=0;break;}nans+=cans;}if (p) ans=min(ans,nans);ok+=p;}if (!ok) printf("-1");else printf("%d",ans); }
View Code
转载于:https://www.cnblogs.com/mastervan/p/10764860.html
[BFS]JZOJ 4672 Graph Coloring相关推荐
- [CF1499G]Graph Coloring
Graph Coloring 题解 一个晚上又没了... 我们考虑什么情况下 ∑ v ∈ V ∣ r ( v ) − b ( v ) ∣ \sum_{v\in V}\left|r(v)-b(v)\ri ...
- C++图形着色graph coloring算法(附完整源码)
图形着色graph coloring算法 图形着色graph coloring算法的完整源码(定义,实现,main函数测试) 图形着色graph coloring算法的完整源码(定义,实现,main函 ...
- 线段树维护区间最大值+第 45 届(ICPC)亚洲区域赛(昆明)L题Simone and Graph Coloring
题意: 给你n个数的序列,当满足i<ji<ji<j andandand ai>aja_i>a_jai>aj时,这两个点之间有一条边,现在对点染色,要求每个点相邻 ...
- 夯实基础项目工程之图论——Uncle Bogdan and Country Happiness,Graph Coloring,How Many Paths?,Array Differentiation
文章目录 做题情况项目报告 Uncle Bogdan and Country Happiness Graph Coloring How Many Paths? Array Differentiatio ...
- 【第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛】Simone and Graph Coloring
#include <bits/stdc++.h> using namespace std; const int maxn = 1000005, INF = 0x7f7f7f7f; int ...
- CodeForces - 1354E Graph Coloring(dfs判断二分图+dp)
题目链接:点击查看 题目大意:给出一个由 n 个点和 m 条边组成的无向图,要求给 n 个点赋值为 1 . 2 或 3 ,需要满足以下条件: 每个点都需要被赋值 权值为 1 的点共 n1 个 权值为 ...
- Graph Coloring I
来源:牛客网: 题目描述 修修在黑板上画了一些无向连通图,他发现他可以将这些图的结点用两种颜色染色,满足相邻点不同色. 澜澜不服气,在黑板上画了一个三个点的完全图.修修跟澜澜说,这个图我能找到一个简单 ...
- poj1419 Graph Coloring 最大独立集(最大团)
最大独立集: 顶点集V中取 K个顶点,其两两间无连接. 最大团: 顶点集V中取 K个顶点,其两两间有边连接. 最大独立集=补图的最大团 最大团=补图的最大独立集 #include<iostrea ...
- 一文直击Graph Embedding图表示学习的原理及应用
导读:我们都知道在数据结构中,图是一种基础且常用的结构.现实世界中许多场景可以抽象为一种图结构,如社交网络,交通网络,电商网站中用户与物品的关系等. 目前提到图算法一般指: 经典数据结构与算法层面的: ...
最新文章
- JavaScriptjQuery.变量作用域
- 用户'NT AUTHORITY\NETWORK SERVICE' 登录失败
- 解读ASP.NET 5 MVC6系列(17):MVC中的其他新特性
- How to allow/block PING on Linux server – IPTables rules for icmp---reference
- Silverlight在调用wcf时传输数据过大返回Not Found的解决办法
- Java基础—序列化关键字transient
- 关系数据库模式和完整性约束相关概念
- [Abp 源码分析]ASP.NET Core 集成
- 2场直播丨CloudQuery最佳实践,
- Mybatis 动态表名,插入数据
- 35张史上最全IT架构师技术知识图谱
- ubuntu18 防火墙关闭_Ubuntu防火墙怎么关闭或打开?
- 在Ubuntu中下载github上的文件
- 解决U盘复制拷贝文件过大不能超过4G的方法
- Ubuntu配置静态IP以及interfaces配置不生效问题解决
- 解决XP系统桌面图标蓝底
- mac命令行压缩解压rar文件
- BZOJ 1143 祭祀 river(最大独立集)
- 清华、复旦、武大……全国近30所高校,超200位学子将相聚世界区块链大会·武汉高校分论坛...
- 昭阳K2450笔记本安装Linux,可能是最难拆的笔记本:lenovo 联想 昭阳K2450 升级固态硬盘的艰难历程...
热门文章
- 04-图像的阈值操作
- mysql创建表时出现1071_mysql 出现1071错误怎么办
- 2560介绍_炒股高手收益翻10倍,只因妙用这一招2560战法,看了都不亏了
- 台达plc控制伺服电机编程实例_PLC控制伺服电机:控制脉冲的相关计算
- matlab figure 嵌套,操作Matlab的Figure窗口(一)
- 发送请求_发送soap请求调用WSDL
- hdu 5299——Circles Game
- centos 无法连接网络
- linux网络编程之网络应用设计模式、分层模型、通信过程
- c++中的异常---2(异常接口声明,异常变量的生命周期,异常的多态使用)