luogu 4429 染色
bjoi 2018 染色 推了个错误结论得了60分?
题目大意:
一个无重边和自环的无向图,并且对每个点分别给了一个大小为2的颜色集合,只能从这个集合中选一种颜色给这个点染色
求一个染色方案使得没有两个有边相连的点被染了相同的颜色
求是否无论颜色集合是什么,均有办法按照要求染色
思路:
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<queue>
#include<vector>
#define ll long long
#define MAXN 10100
#define inf 2139062143
using namespace std;
inline int read()
{
int x=,f=;char ch=getchar();
while(!isdigit(ch)) {if(ch=='-') f=-;ch=getchar();}
while(isdigit(ch)) {x=x*+ch-'';ch=getchar();}
return x*f;
}
struct edge{int s,t,nxt;}e[MAXN<<];
int n,m,fst[MAXN],cnt,ans;
int d[MAXN],vis[MAXN],fa[MAXN];
void add(int u,int v)
{
e[++cnt].s=u,e[cnt].t=v,e[cnt].nxt=fst[u];
fst[u]=cnt,d[u]++;
}
int find(int x){return fa[x]==x?x:fa[x]=find(fa[x]);}
queue <int> q;
vector <int> v[MAXN];
int main()
{
int T=read();
while(T--)
{
n=read(),m=read();int a,b;
for(int i=;i<=MAXN;i++) v[i].clear();
for(int i=;i<=n;i++) fa[i]=i;
memset(fst,,sizeof(fst));
memset(d,,sizeof(d));cnt=,ans=;
memset(vis,,sizeof(vis));
for(int i=;i<=m;i++) {a=read(),b=read();add(a,b);add(b,a);}
for(int i=;i<=n;i++)
if(d[i]==) {q.push(i);vis[i]=;}
while(!q.empty())
{
a=q.front();q.pop();b=-;
for(int j=fst[a];j;j=e[j].nxt)
if(!vis[e[j].t]) b=e[j].t;
if(b==-) continue;
d[b]--;
if(d[b]==){vis[b]=;q.push(b);}
}
for(int i=;i<=*m;i+=)
if(!vis[e[i].s]&&!vis[e[i].t])
{
int a=find(e[i].s),b=find(e[i].t);
if(a!=b) fa[a]=b;
}
for(int i=;i<=n;i++) v[find(i)].push_back(i);
for(int i=;i<=n;i++)
if(fa[i]==i)
{
if(v[i].size()==) continue;
int x=,y=-,z=-,can=;
for(int j=;j<v[i].size();j++)
{
if(d[v[i][j]]>) can=;
if(d[v[i][j]]==)
{
x++;
if(x==) y=v[i][j];
else z=v[i][j];
}
}
if(!can) ans=;
if(x==||x>) ans=;
if((!x)&&v[i].size()%==) ans=;
if(x==)
{
if(v[i].size()%==) ans=;
int p=;
for(int j=;j<v[i].size();j++)
if(v[i][j]!=y&&v[i][j]!=z)
{
a=;
for(int k=fst[v[i][j]];k;k=e[k].nxt)
if(e[k].t==y||e[k].t==z) a++;
if(a==) p++;
}
if(p<) ans=;
}
}
if(ans) puts("YES");
else puts("NO");
}
}
luogu 4429 染色的更多相关文章
- Luogu P2486 染色(树链剖分+线段树)
题解 不妨采取重链剖分的方式把路径剖成区间,然后用线段树维护,考虑如何合并一个区间 struct Node { int lf, rg, tot; }seg[N << 2]; int col ...
- [Luogu 2486] SDOI2011 染色
[Luogu 2486] SDOI2011 染色 树剖水题,线段树维护. 详细题解不写了. 我只想说我写的线段树又变漂亮了qwq #include <algorithm> #include ...
- Luogu P2486 [SDOI2011]染色(树链剖分+线段树合并)
Luogu P2486 [SDOI2011]染色 题面 题目描述 输入输出格式 输入格式: 输出格式: 对于每个询问操作,输出一行答案. 输入输出样例 输入样例: 6 5 2 2 1 2 1 1 1 ...
- LOJ #2527 Luogu P4491「HAOI2018」染色
好像网上没人....和我推出....同一个式子啊..... LOJ #2527 Luogu P4491 题意 $ n$个格子中每个格子可以涂$ m$种颜色中的一种 若有$ k$种颜色恰好涂了$ s$格 ...
- luogu P2486 [SDOI2011]染色
树剖做法: 就是两个dfs+一个线段树 难度的取决基本==线段树的维护难度 所以对有点线段树基础的,树剖也不难做吧 这里操作有二 一:两点间路径染色 线段树的区间赋值操作 二:查询路径段的个数 考虑线 ...
- 【Luogu】P3155叶子的染色(树形DP)
题目链接 树形DP水题qwq. 设f[i][j]是以i为根的子树,染成j色,且满足内部需求的最少染色节点数. 设to是x的子节点,那么状态转移方程如此设计: 1.f[i][0] 这个状态表示i不染色, ...
- 【Luogu】P1330封锁阳光大学(bfs染色)
题目链接 这题恶心死我了. bfs染色,统计每个联通块两色的个数,ans加它们的最小值. #include<cstdio> #include<cctype> #include& ...
- BZOJ 4823 Luogu P3756 老C的方块 染色+最小割
题面太长了请各位自行品尝—>老C的方块 分析: 我们要解决掉所有使人弃疗的组合,还要保证花费最小,容易想到最小割(当然你要是想费用流的话,我们就没办法定义流量了) 我们来分析一下那些令人弃疗的组 ...
- LUOGU 1525 关押罪犯 - 并查集拆点(对立点) / 二分+二分图染色
传送门 分析: 并查集: 第一步先将所有矛盾从大至小排序,显然先将矛盾值大的分成两部分会更优. 普通的并查集都只能快速合并两个元素至同一集合,却不能将两个元素分至不同集合. 对于将很多数分成两个集合, ...
随机推荐
- [Python3网络爬虫开发实战] 3.1-使用urllib
在Python 2中,有urllib和urllib2两个库来实现请求的发送.而在Python 3中,已经不存在urllib2这个库了,统一为urllib,其官方文档链接为:https://docs.p ...
- Linux中搭建FTP服务器
FTP工作原理 (1)FTP使用端口 [root@localhost ~]# cat /etc/services | grep ftp ftp-data 20/tcp #数据链路:端口20 ftp 2 ...
- quilt-补丁工具
参考:https://blog.csdn.net/adomwon/article/details/79047059 前言: 在查找openwrt中samba编译报错问题时直到了quilt这个工具,为了 ...
- Project Euler
Euler 34 答案:40730 我用程序算了无数次都是145,蛋疼,最后拿别人的程序仔细对比…… 原来 !=…… 真蛋疼,我竟然连基础数学都忘了 Euler-44 根据公式容易得出:Pmin + ...
- linux下nginx、php和mysql安装配置
一.安装nginx 安装nginx yum install -y epel-release yum install nginx -y 查看nginx软件包包括了哪些文件 rpm -ql nginx 启 ...
- ruby cloud9部署到heroku
Cloud9网址:https://c9.io/ 使用github账号登陆,如果没有,现在github(https://github.com/)上注册一个用户,在进行登陆.
- 第十七节:Scrapy爬虫框架之item.py文件以及spider中使用item
Scrapy原理图: item位于原理图的最左边 item.py文件是报存爬取数据的容器,他使用的方法和字典很相似,但是相比字典item多了额外的保护机制,可以避免拼写错误或者定义错误. 1.创建it ...
- Spider-scrapy日志处理
Scrapy生成的调试信息非常有用,但是通常太啰嗦,你可以在Scrapy项目中的setting.py中设置日志显示等级: LOG_LEVEL = 'ERROR' 日志级别 Scrapy日志有五种等级, ...
- 2-sat相关知识
转载:http://blog.csdn.net/luyuncheng/article/details/15172827 此题好纠结啊...其实2-sat关键是建边 此题网上好多题解都是直接说了建边而且 ...
- 欧拉 路径&&回路
不管 欧拉回路 还是 欧拉路径 无向图或者有向图(删除方向后)要联通 欧拉路径存在的判定条件 1 无向图 度数为奇数的点最多有两个 2 有向图 最多只能有两个点的入度不等于出度 ...