题意

https://vjudge.net/problem/CodeForces-1228D

有一个n个顶点m条边的无向图,在一对顶点中最多有一条边。

设v1,v2是两个不相交的非空子集,当满足以下条件时f(v1,v2)为真

  • v1中的点之间不存在边
  • v2中的点之间不存在边
  • 对于在v1v2中的每一对顶点,x在v1中,y在v2中,xy之间有边

所有点集不为空,且不相交,是否有v1,v2,v3使得f(v1,v2)、f(v2,v3)、f(v3,v1)均为真

如果有输出每个点所在的点集(1,2,3),否则输出-1

思路

这题比赛没敢开,其实就是个乱搞题,只不过细节很多。。

主要思路就是先随便选一个点插入第一个集合,然后和这个点直接相连的点肯定不能插入第一个集合,不相连的点插入第一个集合。再在不在第一个集合的点中随便选一个点,类似的扩展下去只不过要注意不能用集合1中的点,这样第二个集合就构造好了,剩余的点插入第三个集合,最后判断两两集合是否每个点都相连。这里用map<int,int> mp[N]判断是否相连比较舒服~

代码

#include<bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f
#define ll long long
const int N=200005;
const int mod=1e9+7;
const double eps=1e-8;
const double PI = acos(-1.0);
#define lowbit(x) (x&(-x))
vector<int> g[N];
unordered_map<int,int> mp[N];
int q[N];
int main()
{
std::ios::sync_with_stdio(false);
int n,m,flag=0;
cin>>n>>m;
for(int i=1; i<=m; i++)
{
int u,v;
cin>>u>>v;
g[u].push_back(v);
g[v].push_back(u);
mp[u][v]=mp[v][u]=1;
}
if(m==0)
{
cout<<-1<<endl;
return 0;
}
set<int> a,b,c;
map<int,int> t;
a.insert(1);
int sz=g[1].size(),bb;
if(sz==0)
{
cout<<-1<<endl;
return 0;
}
for(int i=1; i<=n; i++)
{
if(!mp[1][i])
a.insert(i);
else
bb=i;
}
if(a.size()==n)
{
cout<<-1<<endl;
return 0;
}
sz=g[bb].size();
if(sz==0)
{
cout<<-1<<endl;
return 0;
}
b.insert(bb);
for(int i=1; i<=n; i++)
{
if(!mp[bb][i]&&a.find(i)==a.end())
{
b.insert(i);
}
} for(int i=1; i<=n; i++)
{
if(a.find(i)==a.end()&&b.find(i)==b.end())
{
c.insert(i);
}
}
for(int i:a)
{
for(int j:b)
{
if(!mp[i][j])
{
flag=1;
break;
}
}
for(int j:c)
{
if(!mp[i][j])
{
flag=1;
break;
}
}
if(flag)
break;
}
for(int i:b)
{
for(int j:c)
{
if(!mp[i][j])
{
flag=1;
break;
}
}
}
if(a.size()+b.size()+c.size()!=n||
a.size()==0||b.size()==0||c.size()==0||a.size()*b.size()+a.size()*c.size()+b.size()*c.size()!=m)
flag=1; if(flag)
{
cout<<-1<<endl;
}
else
{ for(int i:a)
q[i]=1;
for(int i:b)
q[i]=2;
for(int i:c)
q[i]=3;
for(int i=1; i<=n; i++)
cout<<q[i]<<" ";
cout<<endl;
}
return 0;
}

  

CodeForces - 1228D (暴力+思维+乱搞)的更多相关文章

  1. 2017 ACM-ICPC EC-Final ShangHai(思维乱搞赛)

    感觉全是思维乱搞题. Gym - 101775J Straight Master 给你n种扑克,你每次可以出连续的3 ~ 5 张,问你能否出完. Sample Input 2 13 1 2 2 1 0 ...

  2. Codeforces 1077E (二分乱搞或者dp)

    题意:给你一个数组,可以从中选区若干种元素,但每种元素选区的个数前一种必须是后一种的2倍,选区的任意2种元素不能相同,问可以选取最多的元素个数是多少? 思路1(乱搞):记录一下每种元素的个数,然后暴力 ...

  3. Codeforces 732e [贪心][stl乱搞]

    /* 不要低头,不要放弃,不要气馁,不要慌张 题意: 给n个插座,m个电脑.每个插座都有一个电压,每个电脑都有需求电压. 每个插座可以接若干变压器,每个变压器可以使得电压变为x/2上取整. 有无限个变 ...

  4. codeforces 664B B. Rebus(乱搞题)

    题目链接: B. Rebus time limit per test 1 second memory limit per test 256 megabytes input standard input ...

  5. Aizu - 1386 Starting a Scenic Railroad Service (思维乱搞)

    给你n个区间,求: 1:最多有多少区间与同一个区间相交. 2:相交部分的最大区间数目. Sample Input 1 4 1 3 1 3 3 6 3 6 Sample Output 1 2 2 Sam ...

  6. Yet Another Array Queries Problem CodeForces - 863D (暴力/思维)

    You are given an array a of size n, and q queries to it. There are queries of two types: 1 li ri — p ...

  7. Gym 101480I Ice Igloos(思维乱搞)题解

    题意:给个最多500 * 500的平面,有半径最多不为1的n个圆,现在给你1e5条线段,问你每条线段和几个圆相交,时限10s 思路: 因为半径<1,那么我其实搜索的范围只要在线段附近就好了.x1 ...

  8. Playrix Codescapes Cup (Codeforces Round #413, rated, Div. 1 + Div. 2)(A.暴力,B.优先队列,C.dp乱搞)

    A. Carrot Cakes time limit per test:1 second memory limit per test:256 megabytes input:standard inpu ...

  9. codeforces 653C C. Bear and Up-Down(乱搞题)

    题目链接: C. Bear and Up-Down time limit per test 2 seconds memory limit per test 256 megabytes input st ...

随机推荐

  1. 7.智能快递柜(APP及微信公众号)

    1.智能快递柜(开篇) 2.智能快递柜(终端篇) 3.智能快递柜(通信篇-HTTP) 4.智能快递柜(通信篇-SOCKET) 5.智能快递柜(通信篇-Server程序) 6.智能快递柜(平台篇) 7. ...

  2. msyql master thread

    ------------------------------------------------------ 2015-02-10----------------------------------- ...

  3. ZOJ 3778 Talented Chief

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3778 题目 某人做菜很厉害,一分钟能同时完成最多m个菜的一道工序,输入菜的 ...

  4. AcWing 21. 斐波那契数列

    题目地址 https://www.acwing.com/solution/acwing/content/2896/ 题目描述输入一个整数 n ,求斐波那契数列的第 n 项. 假定从0开始,第0项为0. ...

  5. 设计模式-Bridge(结构型模式)-用于客户需求较多,频繁对类进行添加修改的情形,将抽象类与具体实现类分开

    以下代码来源: 设计模式精解-GoF 23种设计模式解析附C++实现源码 //AbstractionImp.h #pragma once class AbstractionImp { public: ...

  6. Python程序中的线程操作-锁

    目录 一.同步锁 1.1 多个线程抢占资源的情况 1.1.1 对公共数据的操作 1.2 同步锁的引用 1.3 互斥锁与join的区别 二.死锁与递归锁 2.1 死锁 2.2 递归锁RLock 三.典型 ...

  7. 教妹学 Java:动态伴侣 Groovy

    ​ 00.故事的起源 “二哥,听说上一篇<多线程>被 CSDN 创始人蒋涛点赞了?”三妹对她提议的<教妹学 Java>专栏一直很关心. “嗯,有点激动.刚开始还以为是个马甲,没 ...

  8. 教妹学 Java:难以驾驭的多线程

    00.故事的起源 “二哥,上一篇<集合>的反响效果怎么样啊?”三妹对她提议的<教妹学 Java>专栏很关心. “这篇文章的浏览量要比第一篇<泛型>好得多.” “这是 ...

  9. 【BZOJ4823】[CQOI2017]老C的方块(网络流)

    [BZOJ4823][CQOI2017]老C的方块(网络流) 题面 BZOJ 题解 首先还是给棋盘进行黑白染色,然后对于特殊边左右两侧的格子单独拎出来考虑. 为了和其他格子区分,我们把两侧的这两个格子 ...

  10. Spring Boot快速集成kaptcha生成验证码

    Kaptcha是一个非常实用的验证码生成工具,可以通过配置生成多样化的验证码,以图片的形式显示,从而无法进行复制粘贴:下面将详细介绍下Spring Boot快速集成kaptcha生成验证码的过程. 本 ...