【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
随机推荐
- layer 弹框不显示内容
// layer的弹框不显示信息 可能是背景颜色和字体颜色冲突 改下字体颜色即可 layer.msg('<p style="color:black">用户名不能为空&l ...
- ACM-ICPC 2018 徐州赛区网络预赛 J Maze Designer(最大生成树,倍增lca)
https://nanti.jisuanke.com/t/31462 要求在一个矩形中任意选两个点都有唯一的通路,所以不会建多余的墙. 要求满足上述情况下,建墙的费用最小.理解题意后容易想到首先假设全 ...
- java常用设计模式九:桥接模式
一.概述 将抽象部分与它的实现部分分离,使它们都可以独立地变化.它是一种对象结构型模式.比如存在2个维度,第一个维度有一个抽象类A和对应的子类A1和A2:第二个维度有另一个接口B和对应的子类B1和B2 ...
- Jersey RESTful WebService框架学习(一)
介绍:RESTful (Representation State Transfer) 描述了一个架构样式的网络系统,比如 web 应用程序.它首次出现在 2000 年 Roy Fielding 的博士 ...
- Job Interview: Why Only 3 Questions Really Matter
Even for the most fearless amongst us, job interviews can be nerve wracking. In order to give us the ...
- kepware http接口 php
读取某变量的值(HttpRequest <?php $request = new HttpRequest(); $request->setUrl('http://127.0.0.1:393 ...
- POJ3104--Drying(Binary Search)
It is very hard to wash and especially to dry clothes in winter. But Jane is a very smart girl. She ...
- sudo执行脚本找不到环境变量和命令
简介 变量 普通用户下,设置并export一个变量,然后利用sudo执行echo命令,能得到变量的值,但是如果把echo命令写入脚本,然后再sudo执行脚本,就找不到变量,未能获取到值,如题情况如下: ...
- input.php
<?php /** * */ class Input { function get($index = NULL, $xss_clean = FALSE) { if($index == NULL ...
- hdu 5087 次长升序串的长度
http://acm.hdu.edu.cn/showproblem.php?pid=5087 求数列次长升序串的长度 还是dp求最长升序串的长度,再开一个数组记录对于dp值的串的个数 最后看一下最长字 ...