cf1228 D Complete Tripartite(哈希)
题意:
无向简单图,无自环,无重边,n个点,m条边,请你将这n个点分为3个互相没有交集的集合。并且满足以下条件:
1.同一个集合中的任意两点之间没有边。
2.每个点都要与除了它这个集合以外的所有点相连。
没有答案就输出-1,多种答案输出任意一种。
思路:
用hash值代表与一个点相连的 都有哪些点,
如果出现三种hash值就没有答案;
如果有一个点的度为0,也没有答案;
根据哈希值,点被分为三份,如果每一份的点数+它们所连的点的点数 != n,也没有答案;
如果同一条边相连的两个点的哈希值相同,也没有答案。
以上条件都不满足的话,就是答案,输出即可。
代码:
#include <stdio.h>
#include <queue>
#include <string>
#include <string.h>
#include <algorithm>
#include <math.h>
#include <map>
#include <set>
#include <iostream>
using namespace std;
typedef long long int ll;
const int maxn = 1e5 + ;
const int inf = ;
const ll mod = 1e9 + ;
const ll seed = ;
vector<int>mp[maxn];
map<ll,int>s;
ll a[maxn];
int p[maxn];
ll _hash[maxn];
int main()
{
int n,m,x,y,num;
while(scanf("%d%d",&n,&m) != EOF){
s.clear();
num = ;
for(int i = ;i <= m;i++){
scanf("%d%d",&x,&y);
mp[x].push_back(y);
mp[y].push_back(x);
}
for(int i = ;i <= n;i++){
sort(mp[i].begin(),mp[i].end());
ll temp = ;
for(int j = ;j < mp[i].size();j++){
temp = ((temp * seed) % mod + mp[i][j]) % mod;
}
_hash[i] = temp;
if(s[temp] == ){
num++;
a[num] = temp;
p[num] = i;
} s[temp]++;
if(temp == || num > ){
printf("-1\n");
return ;
}
} for(int i = ;i <= ;i++){
if(s[a[i]] + mp[p[i]].size() != n){
printf("-1\n");
return ;
}
} for(int i = ;i <= n;i++){
for(int j = ;j < mp[i].size();j++){
x = i;
y = mp[i][j];
if(_hash[x] == _hash[y]){
printf("-1\n");
return ;
}
}
} for(int i = ;i <= n;i++){
if(_hash[i] == a[])
printf("1 ");
else if(_hash[i] == a[])
printf("2 ");
else
printf("3 ");
}
puts("");
}
return ;
}
cf1228 D Complete Tripartite(哈希)的更多相关文章
- Complete Tripartite
D - Complete Tripartite 思路:这个题是个染色问题.理解题意就差不多写出来一半了.开始的时候还想用离散化来储存每个点的状态,即它连接的点有哪些,但很无奈,点太多了,long lo ...
- CF1228D Complete Tripartite
思路: 任选一点a,和a没有边直接相连的点一定和a在同一个集合,由此构造得到一个集合A.用类似的方法再构造一个集合B,并将剩下的点放在集合C中,就得到了三个集合A,B,C.再检查A,B,C是否符合要求 ...
- CF #589 (Div. 2) D. Complete Tripartite 构造
这个 D 还是十分友好的~ 你发现这 $3$ 个集合形成了一个环的关系,所以随意调换顺序是无所谓的. 然后随便让 $1$ 个点成为第 $2$ 集合,那么不与这个点连边的一定也属于第二集合. 然后再随便 ...
- Codeforces Round #589 (Div. 2) D. Complete Tripartite(染色)
链接: https://codeforces.com/contest/1228/problem/D 题意: You have a simple undirected graph consisting ...
- Codeforces 1228D. Complete Tripartite
传送门 不妨设 $1$ 号点在集合 $1$ 里 那么对于其他点,有且只有所有和 $1$ 没有边的点都在集合 $1$ 里 考虑不在集合 $1$ 的任意一个点 $x$ ,不妨设它在集合 $2$ 里 那么所 ...
- 【Codeforces Round #589 (Div. 2) D】Complete Tripartite
[链接] 我是链接,点我呀:) [题意] 题意 [题解] 其实这道题感觉有点狗. 思路大概是这样 先让所有的点都在1集合中. 然后随便选一个点x,访问它的出度y 显然tag[y]=2 因为和他相连了嘛 ...
- 【Code Force】Round #589 (Div. 2) D、Complete Tripartite
题目链接 大致题意 把一个图分成三块,要求任意两块之间是完全图,块内部没有连线 分析 首先根据块内没有连线可以直接分成两块 假定点1是属于块1的,那么所有与点1连接的点,都不属于块1:反之则是块1的 ...
- D - Complete Tripartite
三分图染色 链接:https://codeforces.com/contest/1228/problem/D 三分图染色步骤:First 首先找一个点1作为集合A中的点,再找到与1相连的一个点设为2, ...
- 【题解】CF1228D Complete Tripartite
Link 题目大意:给定一个无向图,将它划分为三个点集,要求在一个点集中的点没有边相连,且颜色相同,不同集合中的点互相有边相连. \(\text{Solution:}\) 我们发现,与一个点之间没有边 ...
随机推荐
- hostPath Volume【转】
hostPath Volume 的作用是将 Docker Host 文件系统中已经存在的目录 mount 给 Pod 的容器.大部分应用都不会使用 hostPath Volume,因为这实际上增加了 ...
- crackme---攻防世界
首先下载附件之后,查壳 虽然什么也没有发现,但是看一下区段就知道,这个是北斗的壳.所以我们首先载入od开始把壳脱掉 这里面也可以看到pushfd和pushad是北斗壳的特征 这里面我使用是esp定律脱 ...
- idea-plugin-easycode
1.背景 在练习使用mybatis-generator时候,无意间看到博文esaycode(代码神器),https://www.jianshu.com/p/e4192d7c6844,试验完,感觉这个工 ...
- 062、Java中的方法重载
01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public ...
- 038、Java中逻辑运算之非运算“!”
01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public ...
- 005、Java中使用文档注释
01. 代码如下: package TIANPAN; /** * 此处为文档注释 * @author 田攀 微信382477247 */ public class TestDemo { public ...
- 洛谷P2089 烤鸡
标签:暴力,枚举 题目背景 猪猪 Hanke 得到了一只鸡. 题目描述 猪猪 Hanke 特别喜欢吃烤鸡(本是同畜牲,相煎何太急!)Hanke 吃鸡很特别,为什么特别呢?因为他有 10 种配料(芥末. ...
- delphi关闭和禁用Windows服务
function StopServices(const SvrName: string): Boolean; var SCH, SvcSCH: SC_HANDLE; SS: TServiceStatu ...
- BottomTabBar 套用 recycleview出错问题
原来不是用这个框架的 是一个不知名的github开源类 开始感觉很不错 后来套用recycleview就出错应该是碎片关系没处理好 ,后来用bottomtabbar 他的傻逼思想深深撼动了我, ...
- 吴裕雄--天生自然java开发常用类库学习笔记:日期操作类DataFormat、SimpleDataFormat
import java.text.DateFormat ; import java.util.Date ; public class DateDemo03{ public static void ma ...