三分图染色

链接: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 ;
}

最新文章

  1. ajax+php+js实现异步刷新表单验证
  2. js写的5秒钟倒计时跳转
  3. C#图像处理
  4. 学习django之正则表达式re模块
  5. 【POJ 2482】Stars in Your Window
  6. 十四、Java基础---------String、StringBuffer、StringBuilder基本应用
  7. Spring AOP 实现原理
  8. 声明了包的类Java命令找不到或无法加载主类
  9. 351. Android Unlock Patterns
  10. C# 无边框窗体移动代码
  11. express创建网站
  12. iOS中单例需要注意的
  13. Python爬虫入门:爬虫基础了解
  14. STM32基础问题分析——PWM配置
  15. javascript 回到顶部 动画效果
  16. gstreamer在Ubuntu下构建开发环境
  17. ccd引脚
  18. 1070. Mooncake (25)
  19. 洛谷P3388 【模板】割点(割顶)(tarjan求割点)
  20. spring 大会的启示

热门文章

  1. Java日期处理易踩的十个坑
  2. redhat7安装
  3. 我们是怎么实现Grpc CodeFirst
  4. leetcode签到 892. 三维形体的表面积
  5. 为什么你的程序配了classpath还是找不到类
  6. [leetcode] 树 -Ⅰ
  7. 关于laravel5.4.12新增集合操作when方法详解
  8. 白话web安全
  9. debian10切换国内源
  10. 基于华为云IoT Studio自助生成10万行代码的奥秘