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. html页面加载初始化方法

    js: 方法一: window.onload=function(){内容} 方法二(自己定义方法): function onload(){内容} onload(); jQuery: 方法一: $(do ...

  2. CSS九宫格样式

    CSS .main>div { width: 14%; min-width: 160px; padding: 2%; height: 60px; border: 1px solid #f4f4f ...

  3. 分分钟钟学会Python - 文件操作

    文件操作 1 文件基本操作 obj = open('路径',mode='模式',encoding='编码') obj.write() # 写入 obj.read() # 读取 obj.close() ...

  4. 【03】Html书写规范

    [03]   Html书写规范   1.推荐使用html5的文档声明 <!DOCTYPE HTML> 2.必须申明文档的编码charset,且与文件本身编码保持一致,推荐使用UTF-8编码 ...

  5. oracle10g_v$sqltext之对等视图v$sqltext_with_newlines

    --v$sqltext_with_newlines是v$sqltext等同体,较之易读性强(由sql_address及sql_hash_value唯一确认一个cached cursor中的sql)SQ ...

  6. ELK pipeline

    https://www.felayman.com/articles/2017/11/24/1511527532643.html?utm_medium=hao.caibaojian.com&ut ...

  7. 【进击后端】ubuntu 快速安装node mongodb express

    安装软件:node,mongo,express 1.apt install node 2.node -v 3.apt install mongodb 4.mongo -version 5.apt in ...

  8. poj——2367  Genealogical tree

    Genealogical tree Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6025   Accepted: 3969 ...

  9. spring面试相关点

    刚刚开通博客,因为最近在进行各种面试,遇到各种面试问题,用这个机会整理几篇文章方便日后需要 springmvc 和springboot spring boot只是一个配置工具,整合工具,辅助工具. s ...

  10. pydevd 一次trouble shooting

    只是一次小的trouble shooting. 關於python的遠程調試功能.但是由於思路混亂.浪費了許多時間,記錄一下整個過程.作爲改進的參考. 问题背景: 我之前一直在ubuntu上用pycha ...