三分图染色

链接:https://codeforces.com/contest/1228/problem/D

三分图染色步骤:First 首先找一个点1作为集合A中的点,再找到与1相连的一个点设为2,作为集合2中的首元素,再找到与1和2相连的一个点作为集合三的元素。

        Second 枚举每一个点,判断该点是否同时与原先定义的三个点其中的两个相连,如果不相连则退出,输出-1。

        Third,判断当前的点构成的边,与总边数是否相等,如果不相等则输出-1

        Fourth  判断自己集合中的点时候有边;

AC代码:

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+;
vector<int >ve[N];
int arr[N];
int cnt[N];
int main(){
int n,m;
cin>>n>>m;
for(int i=;i<=m;i++) {
int x,y;
cin>>x>>y;
ve[x].push_back(y);
ve[y].push_back(x);
}
int first=;
arr[first]=; if(ve[first].size()==) {
cout<<-<<endl;
return ;
}
int second=ve[first][];
arr[second]=;
int third=;
for(int i=;i<=n;i++){
bool flag1=false ,flag2=false ;
if(i==second||i==first) continue ;
for(int j=;j<ve[i].size();j++){
if(ve[i][j]==first) flag1=true;
if(ve[i][j]==second) flag2=true;
}
if(flag1&&flag2){
third=i;
arr[i]=;
break;
}
}
if(third==){
cout<<-<<endl;
return ;
}
for(int i=;i<=n;i++){
if(i==first||i==second||i==third) continue ;
int flag1=,flag2=,flag3=;
for(int j=;j<ve[i].size();j++){
if(ve[i][j]==first) flag1=;
if(ve[i][j]==second) flag2=;
if(ve[i][j]==third) flag3=;
}
if(flag1+flag2+flag3!=) {
cout<<-<<endl;
return ;
}
if(flag1&&flag2) arr[i]=;
if(flag1&&flag3) arr[i]=;
if(flag2&&flag3) arr[i]=;
}
for(int i = ; i <= n; i ++) cnt[arr[i]] ++;//判断每个颜色一共有个点
if(cnt[]*cnt[] + cnt[]*cnt[] + cnt[]*cnt[] != m) {//每两种颜色都可以产生一条边
cout << - << endl;
return ;
}
for(int i=;i<=n;i++){
for(int j=;j<ve[i].size();j++){
if(arr[i]==arr[ve[i][j]]) {
cout<<-<<endl;
return ;
}
}
}
for(int i=;i<=n;i++) cout<<arr[i]<<" ";
cout<<endl;
return ;
}

D - Complete Tripartite的更多相关文章

  1. Complete Tripartite

    D - Complete Tripartite 思路:这个题是个染色问题.理解题意就差不多写出来一半了.开始的时候还想用离散化来储存每个点的状态,即它连接的点有哪些,但很无奈,点太多了,long lo ...

  2. CF1228D Complete Tripartite

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

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

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

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

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

  5. Codeforces 1228D. Complete Tripartite

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

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

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

  7. cf1228 D Complete Tripartite(哈希)

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

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

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

  9. 【题解】CF1228D Complete Tripartite

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

随机推荐

  1. C 2013笔试题

    1.把整数分解成素数 如90=2*3*3*5 [见2015年] 方法一: int main() { int n, i=2; printf("\nInput:"); scanf(&q ...

  2. CF33C Wonderful Randomized Sum 题解

    原题链接 简要题意: 你可以无限次的把该数组的一个前缀和后缀 \(\times -1\),问最终的最大序列和. 这题盲目WA了数次才知道本质 这题89个数据吊打std CF真好啊,发现一个错后面就不测 ...

  3. angular中$q用法, $q多个promise串行/同步/等待), $q.all用法,使用

    $q的基本用法 function fn() { var defer = $q.defer(); setTimeout(function () { console.log(1); defer.resol ...

  4. ubuntu 下python出现pkg: error processing package *python* 解决之道

    1.linux有些自带程序很多是python写的,自带的python2也最好不要升级,不然会有很多问题 2.如果遇到 pkg: error processing package *python* (- ...

  5. Hive架构原理

    什么是Hive Hive是由Facebook开源用于解决海量结构化日志的数据统计:Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射 成一张表,并提供类SQL查询功能,底层计算引 ...

  6. springboot创建

    1.点击File----->New----->Project...  2.输入MAVEN,组名.包名等相关参数  3.选择SpringBoot版本,选择项目需要依赖的相关骨架包  4.设置 ...

  7. 理解卷积神经网络中的输入与输出形状(Keras实现)

    即使我们从理论上理解了卷积神经网络,在实际进行将数据拟合到网络时,很多人仍然对其网络的输入和输出形状(shape)感到困惑.本文章将帮助你理解卷积神经网络的输入和输出形状. 让我们看看一个例子.CNN ...

  8. 干货 | Python进阶系列之学习笔记(二)

    目录 对象 字符串 一.对象 (1)什么是对象 在python中一切都是对象,每个对象都有三个属性分别是,(id)身份,就是在内存中的地址,类型(type),是int.字符.字典(dic).列表(li ...

  9. 命令行中运行Java字节码文件提示找不到或无法加载主类的问题

    测试类在命令行操作,编译通过,运行时,提示 错误: 找不到或无法加载主类 java类 package com.company.schoolExercise; public class test7_3_ ...

  10. 常见Web安全漏洞--------XSS 攻击

    1,XSS 攻击 XSS攻击使用Javascript脚本注入进行攻击 例如在提交表单后,展示到另一个页面,可能会受到XSS脚本注入,读取本地cookie远程发送给黑客服务器端. <script& ...