这个 D 还是十分友好的~

你发现这 $3$ 个集合形成了一个环的关系,所以随意调换顺序是无所谓的.

然后随便让 $1$ 个点成为第 $2$ 集合,那么不与这个点连边的一定也属于第二集合.

然后再随便找一个与所选点有连边的点,将这个设为第 $3$ 集合中的点,然后与这个点有连边且不为第二集合的就是第一集合的.

构造出了 $3$ 个集合后再判断一下是否不合法即可.

几个判断方式:

1. 一个集合中不能有连边

2. 任意一个集合中所有点出边的数量应该相同.

3. 任何一个点集都不能为空.

#include <bits/stdc++.h>
#define N 100004
#define setIO(s) freopen(s".in","r",stdin)
using namespace std;
vector<int>G[N];
int vised[N],ty[N],cnt[N];
int main()
{
// setIO("input");
int n,m,i,j,flag=0;
scanf("%d%d",&n,&m);
for(i=1;i<=m;++i)
{
int a,b;
scanf("%d%d",&a,&b);
G[a].push_back(b);
G[b].push_back(a);
}
ty[1]=2;
cnt[2]=1;
for(i=0;i<G[1].size();++i)
{
int v=G[1][i];
vised[v]=1;
}
// 对2染色.
for(i=2;i<=n;++i) if(!vised[i]) ty[i]=2, ++cnt[2];
// 判断 2 有没有不合法的.
/*
for(i=2;i<=n;++i)
{
if(ty[i]==2)
{
for(j=0;j<G[i].size();++j)
{
int v=G[i][j];
if(ty[v]==2) flag=1;
}
}
}
*/
// 对 3 染色.
for(i=1;i<=n;++i)
{
if(vised[i])
{
for(j=0;j<G[i].size();++j)
{
int v=G[i][j];
if(!ty[v])
{
ty[v]=1;
++cnt[1];
}
}
ty[i]=3;
++cnt[3];
break;
}
}
for(i=1;i<=n;++i) if(!ty[i]) ty[i]=3, ++cnt[3];
for(i=1;i<=n;++i)
{
if(ty[i]==1)
{
for(j=0;j<G[i].size();++j)
{
int v=G[i][j];
if(ty[v]==1) flag=1;
}
if(G[i].size()!=cnt[2]+cnt[3]) flag=1;
}
if(ty[i]==2)
{
for(j=0;j<G[i].size();++j)
{
int v=G[i][j];
if(ty[v]==2) flag=1;
}
if(G[i].size()!=cnt[1]+cnt[3]) flag=1;
}
if(ty[i]==3)
{
for(j=0;j<G[i].size();++j)
{
int v=G[i][j];
if(ty[v]==3) flag=1;
}
if(G[i].size()!=cnt[1]+cnt[2]) flag=1;
}
}
for(i=1;i<=n;++i) if(!ty[i]) flag=1;
if(!cnt[1]||!cnt[2]||!cnt[3]) flag=1;
if(flag) printf("-1\n");
else
{
for(i=1;i<=n;++i) printf("%d ",ty[i]);
}
return 0;
}

  

CF #589 (Div. 2) D. Complete Tripartite 构造的更多相关文章

  1. Codeforces Round #589 (Div. 2) D. Complete Tripartite(染色)

    链接: https://codeforces.com/contest/1228/problem/D 题意: You have a simple undirected graph consisting ...

  2. Codeforces Round #589 (Div. 2) D. Complete Tripartite(模拟)

    题意:给你n个点 和 m条边 问是否可以分成三个集合 使得任意两个集合之间的任意两个点都有边 思路:对于其中一个集合v1 我们考虑其中的点1 假设点u和1无边 那么我们可以得到 u一定和点1在一个集合 ...

  3. CF #589 (Div. 2)C. Primes and Multiplication 快速幂+质因数

    题目链接:https://www.luogu.org/problem/CF1228C 问题可以转化为:求质数 $p$ 在 $1\sim n$ 中的每个数中的次幂之和. 因为 $p$ 是一个质数,只能由 ...

  4. Codeforces Round #589 (Div. 2) (e、f没写)

    https://codeforces.com/contest/1228/problem/A A. Distinct Digits 超级简单嘻嘻,给你一个l和r然后寻找一个数,这个数要满足的条件是它的每 ...

  5. CF #376 (Div. 2) C. dfs

    1.CF #376 (Div. 2)    C. Socks       dfs 2.题意:给袜子上色,使n天左右脚袜子都同样颜色. 3.总结:一开始用链表存图,一直TLE test 6 (1)如果需 ...

  6. CF #375 (Div. 2) D. bfs

    1.CF #375 (Div. 2)  D. Lakes in Berland 2.总结:麻烦的bfs,但其实很水.. 3.题意:n*m的陆地与水泽,水泽在边界表示连通海洋.最后要剩k个湖,总要填掉多 ...

  7. CF #374 (Div. 2) D. 贪心,优先队列或set

    1.CF #374 (Div. 2)   D. Maxim and Array 2.总结:按绝对值最小贪心下去即可 3.题意:对n个数进行+x或-x的k次操作,要使操作之后的n个数乘积最小. (1)优 ...

  8. CF #374 (Div. 2) C. Journey dp

    1.CF #374 (Div. 2)    C.  Journey 2.总结:好题,这一道题,WA,MLE,TLE,RE,各种姿势都来了一遍.. 3.题意:有向无环图,找出第1个点到第n个点的一条路径 ...

  9. CF #371 (Div. 2) C、map标记

    1.CF #371 (Div. 2)   C. Sonya and Queries  map应用,也可用trie 2.总结:一开始直接用数组遍历,果断T了一发 题意:t个数,奇变1,偶变0,然后与问的 ...

随机推荐

  1. s5p6818裸机程序的设计:以GPIO为例

    为了调试方便,首先确保对于硬件的控制没有问题. Makefile # Makefile edited by Schips # 2019-06-21 schips@dingtalk.com # 文件类型 ...

  2. docker系列3--dockerd配置文件

    dockerd启动配置 docker通信方式选择 docker默认以sock文件方式提供接口,要开放tcp接口远程调用,需要修改配置文件: The Docker daemon can listen f ...

  3. hdu 1285 拓扑

    确定比赛名次 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Subm ...

  4. T4模板使用笔记

    路径获取 ① 获取当前解决方案路径 string solutionsPath = Host.ResolveAssemblyReference("$(SolutionDir)"); ...

  5. C# explicit interface implementation(显式接口实现)

    C# explicit interface implementation 某个类要实现两个包含相同方法名的接口, 应该如何实现这两个方法? namespace ExplicitInterfaceImp ...

  6. html标签从.net framework转移到.net standard(.net core 2.2)时遇到的坑及填坑

    在原来的.net framework mvc中html的标签可以使用下面的方法 <select class="form-control" id="categoryi ...

  7. Ubuntu 14.04 用户如何安装深度音乐播放器和百度音乐插件

    播放本地音乐或者收听国外的音乐电台,Ubuntu 14.04 自带的音乐播放器 Rhythmbox 完全能够满足,但是如果你想有像酷狗那样的国内播放器就需要折腾一下,还好有深度音乐播放器,这是一款完全 ...

  8. springboot启动流程(六)ioc容器刷新前prepareContext

    所有文章 https://www.cnblogs.com/lay2017/p/11478237.html prepareContext方法核心逻辑 上一篇文章中,我们通过createApplicati ...

  9. 关于vue.js的部分总结

    1.MVVM和MVC的区别: MVVM:是Model-View-ViewModel的简写,即模型-视图-视图模型 模型:后端传递的数据 试图:所看到的页面 视图模型:mvvm模式的核心,它是连接vie ...

  10. 微软Surface低端版本将问世

    平板电脑现如今已走进千家万户,其触屏的操作相比笔记本电脑更加方便,屏幕也比手机大很多,是家用玩机的首选.虽然微软也在这一领域有所发力,推出了Surface这一产品,但其高昂的售价使得其在市场上的表现并 ...