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. 小甲鱼Python学习笔记

    一 isdigit()True: Unicode数字,byte数字(单字节),全角数字(双字节),罗马数字False: 汉字数字Error: 无 isdecimal()True: Unicode数字, ...

  2. Go:struct

    一.使用方式 方式3和方式4返回的是:结构体指针,编译器底层对 p.Name 做了转化 *(p).Name,方便程序员使用. type Person struct { Name string Age ...

  3. mysqldump快速导数据

    MySQL导出的SQL语句在导入时有可能会非常非常慢,经历过导入仅45万条记录,竟用了近3个小时.在导出时合理使用几个参数,可以大大加快导入的速度. -e 使用包括几个VALUES列表的多行INSER ...

  4. 概率dp呜呜

    概率dp有环怎么办? 答案可劲迭代 ,然后可劲消元 , 怎么消? 我就不知道了. 呵呵

  5. 国内程序员的十大疑问之一:为什么老外不愿意用MyBatis?

    老外用MyBatis吗 昨天我在我在知乎看到了一张比较Hibernate和MyBatis使用情况的图,顺手发了条朋友圈: Hibernate vs MyBatis ,谁能告诉我什么样的国情导致了这么大 ...

  6. Linux下汇编语言学习笔记41 ---

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

  7. linux 常见名词及命令(四)

    yum仓库的配置 yum仓库的配置文件存放在/etc/yum.repos.d/目录中. 第一步:切换到/etc/yum.repos.d/目录中. 第二步:使用vim编辑器打开一个名为'rhel7.re ...

  8. Ajax核心知识(2)

    对于Ajax核心的东西需要在进行总结提炼一下: xmlHttp对象. 方法:xml.responseText获取后台传递到前台的数据,经常性的使用var object=xml.responseText ...

  9. Eclipse使用Maven时,修改默认中央仓库后的配置报错找不到包的问题解决

    一般在公司内容配置Maven时会在settings.xml文件下配置私服nexus地址,那么修改完之后在Eclipse中如果不指定用户目录级别的settings.xml文件会出现找不到包的问题. se ...

  10. laravel 实时facade

    实时facade 创建一个目录叫services 创建一个weibo类 <?php namespace App\Services; class weibo { protected $http; ...