D - Complete Tripartite

思路:这个题是个染色问题。理解题意就差不多写出来一半了。开始的时候还想用离散化来储存每个点的状态,即它连接的点有哪些,但很无奈,点太多了,long long范围内肯定存不完,于是想到用python来写,但是 py 也没有很熟练.....便放弃了。

需要注意的:

要统计总共有多少颜色,不然会漏掉只有两种颜色的情况,这种情况是输出-1的。还有前向星存边的时候记得开两倍。

代码:

// Created by CAD on 2019/10/2.
#include <bits/stdc++.h>
#define mst(name, value) memset(name,value,sizeof(name))
using namespace std; const int maxn=3e5+5;
struct edge{
int to,next;
}e[maxn<<1];
int cnt,head[maxn],color[maxn],vis[maxn],n,m,blo; void add(int u,int v)
{
e[++cnt].to=v;
e[cnt].next=head[u];
head[u]=cnt;
}
bool check(int x)
{
if(++blo==4) return false;
color[x]=blo;
int num=0;
for(int i=head[x];i;i=e[i].next)
vis[e[i].to]=1,num++;
for(int i=1;i<=n;++i)
{
if(i==x||vis[i]) continue;
int cnt2=0;
color[i]=blo;
for(int j=head[i];j;j=e[j].next)
{
if(!vis[e[j].to]) return false;
cnt2++;
}
if(cnt2!=num) return false;
}
mst(vis,0);
return true;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cin>>n>>m;
for(int i=1,u,v;i<=m;++i)
cin>>u>>v,add(u,v),add(v,u);
for(int i=1;i<=n;++i)
if(!color[i])
if(!check(i)) return puts("-1");
if(blo!=3) return puts("-1");
for(int i=1;i<n;++i)
cout<<color[i]<<" ";
cout<<color[n]<<endl;
return 0;
}

Complete Tripartite的更多相关文章

  1. CF1228D Complete Tripartite

    思路: 任选一点a,和a没有边直接相连的点一定和a在同一个集合,由此构造得到一个集合A.用类似的方法再构造一个集合B,并将剩下的点放在集合C中,就得到了三个集合A,B,C.再检查A,B,C是否符合要求 ...

  2. CF #589 (Div. 2) D. Complete Tripartite 构造

    这个 D 还是十分友好的~ 你发现这 $3$ 个集合形成了一个环的关系,所以随意调换顺序是无所谓的. 然后随便让 $1$ 个点成为第 $2$ 集合,那么不与这个点连边的一定也属于第二集合. 然后再随便 ...

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

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

  4. Codeforces 1228D. Complete Tripartite

    传送门 不妨设 $1$ 号点在集合 $1$ 里 那么对于其他点,有且只有所有和 $1$ 没有边的点都在集合 $1$ 里 考虑不在集合 $1$ 的任意一个点 $x$ ,不妨设它在集合 $2$ 里 那么所 ...

  5. 【Codeforces Round #589 (Div. 2) D】Complete Tripartite

    [链接] 我是链接,点我呀:) [题意] 题意 [题解] 其实这道题感觉有点狗. 思路大概是这样 先让所有的点都在1集合中. 然后随便选一个点x,访问它的出度y 显然tag[y]=2 因为和他相连了嘛 ...

  6. cf1228 D Complete Tripartite(哈希)

    题意: 无向简单图,无自环,无重边,n个点,m条边,请你将这n个点分为3个互相没有交集的集合.并且满足以下条件: 1.同一个集合中的任意两点之间没有边. 2.每个点都要与除了它这个集合以外的所有点相连 ...

  7. 【Code Force】Round #589 (Div. 2) D、Complete Tripartite

    题目链接 大致题意 把一个图分成三块,要求任意两块之间是完全图,块内部没有连线 分析 首先根据块内没有连线可以直接分成两块 假定点1是属于块1的,那么所有与点1连接的点,都不属于块1:反之则是块1的 ...

  8. D - Complete Tripartite

    三分图染色 链接:https://codeforces.com/contest/1228/problem/D 三分图染色步骤:First 首先找一个点1作为集合A中的点,再找到与1相连的一个点设为2, ...

  9. 【题解】CF1228D Complete Tripartite

    Link 题目大意:给定一个无向图,将它划分为三个点集,要求在一个点集中的点没有边相连,且颜色相同,不同集合中的点互相有边相连. \(\text{Solution:}\) 我们发现,与一个点之间没有边 ...

随机推荐

  1. 04docker容器操作

    操作Docker container 容器是镜像的一个运行实例,镜像是静态的只读文件,容器带有运行时需要的可写文件层,同时,容器中的应用进程处于运行状态 1:新建一个容器 ubuntu@ubuntu: ...

  2. L1-025. 正整数A+B 简单复习一下,。

    本题的目标很简单,就是求两个正整数A和B的和,其中A和B都在区间[1,1000].稍微有点麻烦的是,输入并不保证是两个正整数. 输入格式: 输入在一行给出A和B,其间以空格分开.问题是A和B不一定是满 ...

  3. mybatis 插入语句 返回自增长id方法

    背景:目前有个插入语句需要获取插入记录的id  因为id是自增长的,所以要在插入后返回这个id 错误1: mapper.xml: <!-- 新增 返回自增长id--> <insert ...

  4. python之时间日期datetime

    相比于time模块,datetime模块的接口则更直观.更容易调用datetime模块定义了以下几个类: datetime.date():表示日期的类.常用的属性是year,month,day:dat ...

  5. windows 下 node 入门

    node js node -v npm -v nvm  v nvm list npm install * -g npm install express -g npm install -g expres ...

  6. linux命令详解——top

    简介 TOP是一个动态显示过程,即可以通过用户按键来不断刷新当前状态.如果在前台执行该命令,它将独占前台,直到用户终止该程序为止.比较准确的说,top命令提供了实时的对系统处理器的状态监视.它将显示系 ...

  7. 基于Dockerfile搭建JAVA Tomcat运行环境

    前言 在第一篇文字中,我们完全人工方式,一个命令一个命令输入,实现一个java tomcat运行环境,虽然也初见成效,但很累人.如果依靠依靠脚本构建一个Tomcat容器实例,一个命令可以搞定,何乐而不 ...

  8. C++ 新特性 笔记 2 右值引用

    C ++ Rvalue引用说明 以下内容,主要是上述链接的摘要 介绍 Rvalue引用是C ++的一个特性,它是随C ++ 11标准添加的.使右值参考有点难以理解的是,当你第一次看到它们时,不清楚它们 ...

  9. 22_7mybaits注解开发

    这几年来注解开发越来越流行,Mybatis 也可以使用注解开发方式,这样我们就可以减少编写 Mapper 映射文件了. 1.常用注解说明 @Insert:实现新增 @Update:实现更新 @Dele ...

  10. 【转载】Role of RL in Text Generation by GAN

    本篇随笔为转载,原贴作者:知乎 SCUT 胡杨,原贴地址:Role of RL in Text Generation by GAN(强化学习在生成对抗网络文本生成中扮演的角色).