【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.11.07 NOIP训练 lzy的游戏(01背包)
传送门 考虑对于每次最后全部选完之后剩下的牌的集合都对应着一种构造方法. 一个更接地气的说法: 设消耗的牌数为ttt,如果使用的牌的lll值之和也为ttt,则对应着一种构造方式让这种情形成立. 于是做 ...
- STL六大组件
1.容器 顺序容器.关联容器 2.算法 各种常用算法,sort.search.copy…… 3.迭代器 用来索引容器中元素,是容器与算法之间的胶合剂 4.仿函数(另名函数对象) 仿函数就是让一个类的使 ...
- querySelectorAll()方法
querySelectorAll()方法 调用的对象包括:Document(文档) DocumentFragment(文档片段) Element(元素) querySelectorAll()方法接收的 ...
- mysql碰到unknown variable 'xxxx' 的解决方法
在使用mysqlbinlog查看日志的时候碰到了一个问题, 错误提示如下: /usr/local/mysql/bin/mysqlbinlog: unknown variable 'default-ch ...
- 【慕课网实战】Spark Streaming实时流处理项目实战笔记四之铭文升级版
铭文一级: 需求二:Agent选型:exec source + memory channel + logger sink# Name the components on this agenta1.so ...
- HtmlControls和Webcontrols命名空间的区别
HtmlControls(以下简称HC)是对大部分Html标签的复制,这些标签原来是什么样,经过服务器解释后的HC就是什么样.要使用HC,只需要在相应的html标签内加上runat=“server”属 ...
- Ng第十三课:聚类(Clustering)
13.1 无监督学习:简介 13.2 K-均值算法 13.3 优化目标 13.4 随机初始化 13.5 选择聚类数 13.1 无监督学习:简介 在这个视频中,将开始介绍聚类算法.这将是一个激 ...
- leetcode - [7]Binary Tree Preorder Traversal
Given a binary tree, return the preorder traversal of its nodes' values. For example:Given binary tr ...
- MapGIS10.3新功能
智能的GIS 支持开放的数据集.数据库.等等 T-C-V 软件结构是继局部网软件的 C/S 结构,互联网软件的 B/S 结构发展起来的适合云 计算.云服务的新一代软件三层结构,分别为终端应用层(T 层 ...
- Android内容提供者(Content provider)
使用ContentProvider共享数据 当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就可以向其他应用共享其数据.虽然使用其他方法也可以对外共享数据,但数据访 ...