【xsy3355】图 思维
题目大意:给你一个n个点m条无向边的图,问这个图是否能够:
1,被四染色(用四种颜色给图染色,且相邻点颜色不同)。
2,找出一个奇环,满足在原图中去掉这个奇环后每个点依然相邻。
请输出1或者2中的任意一种,如果不能就输出类似-1的东西。
数据范围:n,m≤300000
xfzIQ=-1
我们首先构造一棵生成树出来,这个生成树显然是一个二分图,二分图显然可以黑白染色。
对于原图中的非树边,我们把这些变构成一个图G,若G为二分图,显然原图就可以四染色了。
若G不是二分图,那么G中必有奇环,我们把奇环找出来输出就可以了。
智商被侮辱系列题目。
#include<bits/stdc++.h>
#define M 300005
using namespace std; int f[M]={}; int get(int x){return f[x]==x?x:f[x]=get(f[x]);}
struct edge{int u,next;}e[M*]={}; int head[M]={},use=;
void add(int x,int y){use++;e[use].u=y;e[use].next=head[x];head[x]=use;} int col1[M]={},col2[M]={};
int n,m,noX=,noY=;
int u[M]={},v[M]={},sel[M]={}; void dfs(int x,int col){
col1[x]=col; if(col==) col=; else col=;
for(int i=head[x];i;i=e[i].next)
if(col1[e[i].u]==) dfs(e[i].u,col);
}
void dfs2(int x,int col){
col2[x]=col; if(col==) col=; else col=;
for(int i=head[x];i;i=e[i].next)
if(col2[e[i].u]==) dfs2(e[i].u,col);
else{
if(col2[e[i].u]==col2[x]){
noX=e[i].u;
noY=x;
//return;
}
}
} int ans[M]={},cnt=;
int getans(int x,int fa){
if(x==noY){
ans[++cnt]=x;
return ;
}
for(int i=head[x];i;i=e[i].next) if(e[i].u!=fa){
if(getans(e[i].u,x)){
ans[++cnt]=x;
return ;
}
}
return ;
} int main(){
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++) f[i]=i;
for(int i=;i<=m;i++){
scanf("%d%d",u+i,v+i);
int U=get(u[i]),V=get(v[i]);
if(U==V) continue;
sel[i]=; f[U]=V;
add(u[i],v[i]); add(v[i],u[i]);
}
dfs(,);
memset(head,,sizeof(head)); use=;
for(int i=;i<=m;i++) if(sel[i]==){
add(u[i],v[i]); add(v[i],u[i]);
}
for(int i=;i<=n;i++)
if(col2[i]==) dfs2(i,); if(noX==){
printf("A ");
for(int i=;i<=n;i++)
printf("%d ",col1[i]+(col2[i]-)*);
return ;
} memset(head,,sizeof(head)); use=;
for(int i=;i<=n;i++) f[i]=i;
for(int i=;i<=m;i++) if(sel[i]==){
if(col2[u[i]]==col2[v[i]]) continue;
int U=get(u[i]),V=get(v[i]);
if(U==V) continue;
f[U]=V;
add(u[i],v[i]); add(v[i],u[i]);
if(get(noX)==get(noY)) break;
}
getans(noX,);
printf("B %d ",cnt);
for(int i=;i<=cnt;i++) printf("%d ",ans[i]);
}
【xsy3355】图 思维的更多相关文章
- 心智图/思维导图(Mind Map/Mind Mapping),思维导图介绍
心智图(Mind Map),又称脑图.心智地图.脑力激荡图.思维导图.灵感触发图.概念地图.树状图.树枝图或思维地图,是一种图像式思维的工具以及一种利用图像式思考辅助工具来表达思维的工具. 心智图 ...
- ZOJ 1654 Place the Robots建图思维(分块思想)+二分匹配
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=654 AC一百道水题,不如AC一道难题来的舒服. 题意:一个n*m地图 ...
- HDU 4292 Food (建图思维 + 最大流)
(点击此处查看原题) 题目分析 题意:某个餐馆出售f种食物,d种饮料,其中,第i种食物有fi份,第i种饮料有di份:此时有n个人来餐馆吃饭,这n个人必须有一份食物和一份饮料才会留下来吃饭,否则,他将离 ...
- POJ - 1149 PIGS (建图思维+最大流)
(点击查看原题) 题目分析 (以下均为 Edelweiss 大佬的思路,博主承认自己写不了这么好,但是学习的心促使我记录下这个好题的写法,所以代码是我写的) [题目大意] 有 M 个猪圈,每个猪圈里初 ...
- <思维导图>思维导图
- 各种图(流程图,思维导图,UML,拓扑图,ER图)简介
来源于:http://www.cnblogs.com/jiqing9006/p/3344221.html 流程图 1.定义:流程图是对过程.算法.流程的一种图像表示,在技术设计.交流及商业简报等领域有 ...
- 【转】各种图(流程图,思维导图,UML,拓扑图,ER图)简介
原文地址:各种图(流程图,思维导图,UML,拓扑图,ER图)简介 流程图 1.定义:流程图是对过程.算法.流程的一种图像表示,在技术设计.交流及商业简报等领域有广泛的应用. 2.案例 3.计算机语言只 ...
- LeetCode刷题专栏第一篇--思维导图&时间安排
昨天是元宵节,过完元宵节相当于这个年正式过完了.不知道大家有没有投入继续投入紧张的学习工作中.年前我想开一个Leetcode刷题专栏,于是发了一个投票想了解大家的需求征集意见.投票于2019年2月1日 ...
- java关键词整理——思维导图
如图 思维导图图片链接 http://www.edrawsoft.cn/viewer/public/s/5e27f174483042
随机推荐
- 2018.10.23 hdu2476String painter(区间dp)
传送门 一道挺妙的区间dp. 我们先用区间dp求出第一个串为空串时的最小代价. 然后再加入原本的字符更新答案就行了. 代码: #include<bits/stdc++.h> using n ...
- 微信小程序toast框的使用
1.wx.showToast() 方法可以配置toast框的提示文字,消失的时间,显示的图标 wx.showToast({ title: '请链接网络', icon:"none", ...
- windows、linux下通过ftp上传文件小脚本
一.windows @echo off #open ip 将要上传文件的IP地址echo open IP>ftp.up #用户名echo ninic>>ftp.up #密码echo ...
- 下载编译安装Apache HTTP Server 2.4.23以及配置HTTP/HTTPS反向代理
http://blog.csdn.net/gangchengzhong/article/details/52910225 [注意,在编译make时出现的错误并不是文章中说的openssl的版本问题,而 ...
- idea中Eclipse Code Formatter插件设置和使用,以及注释模板的修改
在settings里面找到plugins这个选项,搜索Eclipse Code Formatter,点击安装,重启idea即可进行配置: 首先,先安装Eclipse Code Formatter插件: ...
- javascript 连等赋值问题
var a = {n:1}; var b = a; // 持有a,以回查 a.x = a = {n:2}; alert(a.x);// --> undefined alert(b.x);// - ...
- mmm和mmma的区别
m:编译整个安卓系统 makes from the top of the tree mm:编译当前目录下的模块,当前目录下需要有Android.mk这个makefile文件,否则就往上找最近的Andr ...
- idea配置github
一.事先准备 1.安装Git Git下载: http://git-scm.com/downloads 最新版本是2.1.2 git登陆地址:https://github.com/ 2.注册GitHub ...
- (最短路 弗洛伊德) Til the Cows Come Home -- POJ --2387
#include <iostream> #include <cstdlib> #include <cstring> #include <cstdio> ...
- jquery中data()和js中dataset属性的区别
INTRO html的标签属性data-允许用户自定义属性.原生javascript和jquery分别定义了dataset属性和data()方法对标签中的data属性进行操作. 取值: 如我们定义这样 ...