[BFS]JZOJ 4672 Graph Coloring

Description

现在你有一张无向图包含n个节点m条边。最初,每一条边都是蓝色或者红色。每一次你可以将一个节点连接的所有边变色(从红变蓝,蓝变红)。
找到一种步数最小的方案,使得所有边的颜色相同。

Input

第一行包含两个数n,m(1<=n,m<=100000)分别代表节点数和边的数量
接下来m行描述边,第i行ui,vi,ci,代表ui有一条颜色为ci的边与vi相连(ci是B或者是R),B代表蓝色,R代表红色。数据保证没有自环的边。

Output

如果没有方案就输出-1。否则第一行输出k代表最小的步数

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

对于30%数据,n<=20,m<=20

分析

非常简单的染色问题

我们分两次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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/387780.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JAVA的值传递问题

为什么 Java 中只有值传递&#xff1f; 首先回顾一下在程序设计语言中有关将参数传递给方法&#xff08;或函数&#xff09;的一些专业术语。按值调用(call by value)表示方法接收的是调用者提供的值&#xff0c;而按引用调用&#xff08;call by reference)表示方法接收的是调…

2017 百度杯丶二月场第一周WP

1.祸起北荒 题目&#xff1a; 亿万年前 天子之子华夜&#xff0c;被父神之神末渊上神告知六荒十海之北荒西二旗即将发生一场“百度杯”的诸神之战 他作为天族的太子必须参与到此次诸神之战定六荒十海 华夜临危受命&#xff0c;马上带着火凤凰飞行到北荒“西二旗” 却没想到这六…

iPhone手机屏幕尺寸(分辨率)

第一代iPhone2G屏幕为3.5英吋&#xff0c;分辨率为320*480像素&#xff0c;比例为3:2。 第二代iPhone3G屏幕为3.5英吋&#xff0c;分辨率为320*480像素&#xff0c;比例为3:2。 第三代iPhone3GS屏幕为3.5英吋&#xff0c;分辨率为320*480像素&#xff0c;比例为3:2。 第四代iPh…

UDP打洞NAT大致分为下面四类 P2P

NAT大致分为下面四类 1) Full Cone 这种NAT内部的机器A连接过外网机器C后,NAT会打开一个端口.然后外网的任何发到这个打开的端口的UDP数据报都可以到达A.不管是不是C发过来的. 例如 A:192.168.8.100 NAT:202.100.100.100 C:292.88.88.88 A(192.168.8.100:5000) -> NAT(202.1…

让内核突破512字节的限制

转载于:https://www.cnblogs.com/ZHONGZHENHUA/p/10124237.html

struts2的漏洞

文章前半部分来自团队小伙伴阿德马的总结&#xff0c;后半部分的Poc和Exp是小编匆忙之际借鉴而来&#xff0c;感谢写Poc和Exp的伙伴~ 安恒给官方上报的&#xff0c;然后官方选择了1个对国内来说比较敏感的时期发了公告出来&#xff0c;好蛋疼。 该漏洞的CVE编号是CVE-2017-56…

Leetcode PHP题解--D47 868. Binary Gap

2019独角兽企业重金招聘Python工程师标准>>> D47 868. Binary Gap 题目链接 868. Binary Gap 题目分析 给定一个数字&#xff0c;计算其二进制表示中&#xff0c;出现的两个1最大距离。 思路 当然是先转换成二进制了。再进行遍历。 当只有一个1时&#xff0c;返回0。…

docker 网络 不好用 docker: Error response from daemon: failed to create endpoint jovial_wing on network b

启动容器时&#xff0c;有可能会遇到如下问题&#xff0c;比如启动redis容器&#xff1a; sudo docker run -d -p 6379:6379 --name redis redis:latest Linux代码docker: Error response from daemon: failed to create endpoint redis on network bridge: iptables failed: …

hadoop-hdfs-存储模型-架构模型-角色介绍

转载于:https://www.cnblogs.com/LXL616/p/10803978.html

docker 镜像 导入导出

很喜欢玩docker&#xff0c;但最新遇到一个问题&#xff0c;公司给的新机器的dns有问题&#xff0c;导致pull不下来镜像。 没办法了&#xff0c;没有镜像什么神马都干不了&#xff0c;又不能花很多时间去搭建私有的镜像库&#xff0c;只有另寻办法了。 废话少说&#xff0c;经…

使用Nginx+uWSGI部署Django项目

1.linux安装python3环境 参考链接&#xff1a;https://www.cnblogs.com/zzqit/p/10087680.html 2.安装uwsgi pip3 install uwsgiln -s /usr/local/python3/bin/uwsgi /usr/local/bin/uwsgi #建立软链接uwsgi --version #检查安装成功 3.基于uwsgidjango项目部署 django项目目…

lsof使用

简介 lsof(list open files)是一个列出当前系统打开文件的工具。在linux环境下&#xff0c;任何事物都以文件的形式存在&#xff0c;通过文件不仅仅可以访问常规数据&#xff0c;还可以访问网络连接和硬件。所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等&#xf…

解题:2017清华集训 无限之环

题面 费用流 把每种水管再拆出来四个方向的接头&#xff0c;然后根据水管的形状连出旋转时的代价。最后黑白染色成二分图&#xff0c;然后白点对应的接头向黑点对应的接头连边&#xff0c;源点向白点自己连边&#xff0c;黑点自己向汇点连边。 怎么连边&#xff1f;我是大力讨论…

与图论的邂逅05:最近公共祖先LCA

什么是LCA&#xff1f; 祖先链 对于一棵树T&#xff0c;若它的根节点是r&#xff0c;对于任意一个树上的节点x&#xff0c;从r走到x的路径是唯一的(显然)&#xff0c;那么这条路径上的点都是并且只有这些点是x的祖先。这些点组成的链(或者说路径)就是x的祖先链。 LCA 根据名字来…

MAC地址进行验证的方法

需要对对应的MAC地址进行验证的方法&#xff0c;以为很简单就能过&#xff0c;鼓捣了半天以后才发现&#xff0c;我的机器是window7&#xff0c;查询出来是乱码&#xff0c;居然不给支持。没办法在网上继续找资料。终于找到了&#xff0c;贴上来&#xff0c;以备不时之需。 东西…

相机添加多张图片css布局

<section class"feedback-upload"><aside class"photos"><div></div><div class"camera"></div></aside><aside class"tips"><div><span>选填0~4</span></div&…

跟随我在oracle学习php(21)

变量间的传值方式 总体说明&#xff1a; 1&#xff0c;这里讨论的传值方式是指&#xff1a;一个变量对另一个变量 2&#xff0c;它不仅仅适用于赋值语句&#xff0c;也适用于其他有同样含义的语句&#xff0c;比如&#xff1a;函数的实参到形参 3&#xff0c;传值方式只有2种&a…

【转】WPF自定义控件与样式(3)-TextBox RichTextBox PasswordBox样式、水印、Label标签、功能扩展...

一&#xff0e;前言.预览 申明&#xff1a;WPF自定义控件与样式是一个系列文章&#xff0c;前后是有些关联的&#xff0c;但大多是按照由简到繁的顺序逐步发布的等。 本文主要是对文本输入控件进行样式开发&#xff0c;及相关扩展功能开发&#xff0c;主要内容包括&#xff1a;…

JVM调优 dump文件怎么生成和分析

1、获取JVM的dump文件的两种方式   1. JVM启动时增加两个参数: #出现 OOME 时生成堆 dump: -XX:HeapDumpOnOutOfMemoryError #生成堆文件地址&#xff1a; -XX:HeapDumpPath/home/liuke/jvmlogs/ 2. 发现程序异常前通过执行指令&#xff0c;直接生成当前JVM的dmp文件&#x…