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 染色的更多相关文章

  1. Luogu P2486 染色(树链剖分+线段树)

    题解 不妨采取重链剖分的方式把路径剖成区间,然后用线段树维护,考虑如何合并一个区间 struct Node { int lf, rg, tot; }seg[N << 2]; int col ...

  2. [Luogu 2486] SDOI2011 染色

    [Luogu 2486] SDOI2011 染色 树剖水题,线段树维护. 详细题解不写了. 我只想说我写的线段树又变漂亮了qwq #include <algorithm> #include ...

  3. Luogu P2486 [SDOI2011]染色(树链剖分+线段树合并)

    Luogu P2486 [SDOI2011]染色 题面 题目描述 输入输出格式 输入格式: 输出格式: 对于每个询问操作,输出一行答案. 输入输出样例 输入样例: 6 5 2 2 1 2 1 1 1 ...

  4. LOJ #2527 Luogu P4491「HAOI2018」染色

    好像网上没人....和我推出....同一个式子啊..... LOJ #2527 Luogu P4491 题意 $ n$个格子中每个格子可以涂$ m$种颜色中的一种 若有$ k$种颜色恰好涂了$ s$格 ...

  5. luogu P2486 [SDOI2011]染色

    树剖做法: 就是两个dfs+一个线段树 难度的取决基本==线段树的维护难度 所以对有点线段树基础的,树剖也不难做吧 这里操作有二 一:两点间路径染色 线段树的区间赋值操作 二:查询路径段的个数 考虑线 ...

  6. 【Luogu】P3155叶子的染色(树形DP)

    题目链接 树形DP水题qwq. 设f[i][j]是以i为根的子树,染成j色,且满足内部需求的最少染色节点数. 设to是x的子节点,那么状态转移方程如此设计: 1.f[i][0] 这个状态表示i不染色, ...

  7. 【Luogu】P1330封锁阳光大学(bfs染色)

    题目链接 这题恶心死我了. bfs染色,统计每个联通块两色的个数,ans加它们的最小值. #include<cstdio> #include<cctype> #include& ...

  8. BZOJ 4823 Luogu P3756 老C的方块 染色+最小割

    题面太长了请各位自行品尝—>老C的方块 分析: 我们要解决掉所有使人弃疗的组合,还要保证花费最小,容易想到最小割(当然你要是想费用流的话,我们就没办法定义流量了) 我们来分析一下那些令人弃疗的组 ...

  9. LUOGU 1525 关押罪犯 - 并查集拆点(对立点) / 二分+二分图染色

    传送门 分析: 并查集: 第一步先将所有矛盾从大至小排序,显然先将矛盾值大的分成两部分会更优. 普通的并查集都只能快速合并两个元素至同一集合,却不能将两个元素分至不同集合. 对于将很多数分成两个集合, ...

随机推荐

  1. linux arping-通过发送ARP协议报文测试网络

    博主推荐:更多网络测试相关命令关注 网络测试  收藏linux命令大全 arping命令是用于发送arp请求到一个相邻主机的工具,arping使用arp数据包,通过ping命令检查设备上的硬件地址.能 ...

  2. Python之面向对象继承和派生

    Python之面向对象继承和派生 什么是继承: 继承是一种创建新的类的方法.在Python中,新建的类可以继承自一个或多个父类.原始类称为基类或超类. 新建的类称为派生类或子类. Python中类的继 ...

  3. Python之面向对象slots与迭代器协议

    Python之面向对象slots与迭代器协议 slots: # class People: # x=1 # def __init__(self,name): # self.name=name # de ...

  4. scrapy快速入门

    1. 什么是scrapy? 其官网是这样简述的,“A Fast & Powerful Scraping &Crawling Framework ”,  并且其底层以twisted作为网 ...

  5. 88-On Balance Volume 能量潮指标.(2015.7.4)

    On Balance Volume 能量潮指标 ~计算方法: 如果当天的收盘价高于昨天的话,那么:OBV(i) = OBV(i-1)+VOLUME(i) 如果当天的收盘价低于昨天的话,那么:OBV(i ...

  6. POJ 1330 (LCA)

    http://poj.org/problem?id=1330 题意:给出一个图,求两个点的最近公共祖先. sl :水题,贴个模板试试代码.本来是再敲HDU4757的中间发现要用LCA,  操蛋只好用这 ...

  7. 热部署jredel介绍

    在进行java web程序开发过程中,经常遇到这种问题,修改一个java文件(*.java),需要重启web服务器(如tomcat,weblogic等),部署项目.而起/停服务器浪费了大量的时间.在小 ...

  8. [NOIP2005] 提高组 洛谷P1053 篝火晚会

    题目描述 佳佳刚进高中,在军训的时候,由于佳佳吃苦耐劳,很快得到了教官的赏识,成为了“小教官”.在军训结束的那天晚上,佳佳被命令组织同学们进行篝火晚会.一共有n个同学,编号从1到n.一开始,同学们按照 ...

  9. Linux下汇编语言学习笔记25 ---

    这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...

  10. Thinkphp5.0 的使用模型Model添加数据

    Thinkphp5.0 的使用模型Model添加数据 使用create()方法添加数据 $res = TestUser::create([ 'name' => 'zhao liu', 'pass ...