【链接】 我是链接,点我呀:)

【题意】

题意

【题解】

其实这道题感觉有点狗。
思路大概是这样
先让所有的点都在1集合中。
然后随便选一个点x,访问它的出度y
显然tag[y]=2
因为和他相连了嘛
然后其他没有和x相连的点显然只能和x在同一个集合中
所以其他1集合的点你会发现你想改也没法改,就算他们有可能连在一起也没用,因为你不可能再把其他的1改成2了,因为会和你之前选的A冲突(和这个你想
改的2没有边相连)
这就是这题的主要ideal,就是抓住这一点做文章。
然后接着,我们仍然是随便找一个2号集合里面的点a,遍历它的出度b
显然b只能放在3集合里了。
然后仍然是,你会发现你也不能去动3号集合里的元素了。
就这么锁死了。。。
然后去验证形成的集合是否满足题中给的关系就好。
要记得先判断|set1*set2|+|set1*set3|+|set2*set3|是不是等于m
不然直接暴力判断的话 如果这3个和加起来很大的话(因为你肯定就得这样暴力判断的),会超时的.
(如果等于m的话,你看题中m是比较小的

【代码】

#include <bits/stdc++.h>
using namespace std; const int N = 1e5; int n,m;
int ans[N+10];
vector<int> h[4];
vector<int> g[N+10];
set<pair<int,int> > myset; bool ok(int k1,int k2){
int len1 = h[k1].size();
int len2 = h[k2].size();
for (int i = 0;i < len1;i++)
for (int j = 0;j < len2;j++){
int x = h[k1][i],y = h[k2][j];
if (myset.find(make_pair(x,y))==myset.end()) return false;
}
return true;
} int main(){
scanf("%d%d",&n,&m);
for (int i = 1;i <= m;i++){
int x,y;
scanf("%d%d",&x,&y);
g[x].push_back(y);g[y].push_back(x);
}
for (int i = 1;i <= n;i++){
ans[i] = 1;
}
int len = g[1].size();
for (int i = 0;i < len;i++){
int y = g[1][i];
ans[y] = 2;
}
int z = -1;
for (int i = 1;i <= n;i++)
if (ans[i]==2){
z = i;
break;
}
if (z==-1){
printf("-1");
return 0;
}
len = g[z].size();
for (int i = 0;i < len;i++){
int y = g[z][i];
if (ans[y]==2){
ans[y] = 3;
}
}
for (int i = 1;i <= n;i++) h[ans[i]].push_back(i);
if (h[3].empty()) {
printf("-1");
return 0;
}
int n1 = h[1].size(),n2 = h[2].size(),n3 = h[3].size();
if (n1*n2+n1*n3+n2*n3!=m){
printf("-1");
return 0;
}
for (int i = 1;i <= n;i++){
len = g[i].size();
for (int j = 0;j < len;j++){
int y = g[i][j];
myset.insert(make_pair(i,y));
}
}
if (ok(1,2) && ok(1,3) && ok(2,3)){ }else{
printf("-1");
return 0;
}
for (int i = 1;i <= n;i++){
printf("%d\n",ans[i]);
}
return 0;
}

【Codeforces Round #589 (Div. 2) D】Complete Tripartite的更多相关文章

  1. 【Codeforces Round #432 (Div. 1) B】Arpa and a list of numbers

    [链接]h在这里写链接 [题意] 定义bad list是一个非空的.最大公约数为1的序列.给定一个序列,有两种操作:花费x将一个元素删除.花费y将一个元素加1,问你将这个序列变为good list所需 ...

  2. 【Codeforces Round #420 (Div. 2) C】Okabe and Boxes

    [题目链接]:http://codeforces.com/contest/821/problem/C [题意] 给你2*n个操作; 包括把1..n中的某一个数压入栈顶,以及把栈顶元素弹出; 保证压入和 ...

  3. 【Codeforces Round #420 (Div. 2) B】Okabe and Banana Trees

    [题目链接]:http://codeforces.com/contest/821/problem/B [题意] 当(x,y)这个坐标中,x和y都为整数的时候; 这个坐标上会有x+y根香蕉; 然后给你一 ...

  4. 【Codeforces Round #420 (Div. 2) A】Okabe and Future Gadget Laboratory

    [题目链接]:http://codeforces.com/contest/821/problem/A [题意] 给你一个n*n的数组; 然后问你,是不是每个位置(x,y); 都能找到一个同一行的元素q ...

  5. 【Codeforces Round #423 (Div. 2) C】String Reconstruction

    [Link]:http://codeforces.com/contest/828/problem/C [Description] 让你猜一个字符串原来是什么; 你知道这个字符串的n个子串; 且知道第i ...

  6. 【Codeforces Round #423 (Div. 2) B】Black Square

    [Link]:http://codeforces.com/contest/828/problem/B [Description] 给你一个n*m的格子; 里面包含B和W两种颜色的格子; 让你在这个格子 ...

  7. 【Codeforces Round #423 (Div. 2) A】Restaurant Tables

    [Link]:http://codeforces.com/contest/828/problem/A [Description] 有n个组按照时间顺序来餐馆; 每个组由一个人或两个人组成; 每当有一个 ...

  8. 【Codeforces Round #422 (Div. 2) D】My pretty girl Noora

    [题目链接]:http://codeforces.com/contest/822/problem/D [题意] 有n个人参加选美比赛; 要求把这n个人分成若干个相同大小的组; 每个组内的人数是相同的; ...

  9. 【Codeforces Round #422 (Div. 2) C】Hacker, pack your bags!(二分写法)

    [题目链接]:http://codeforces.com/contest/822/problem/C [题意] 有n个旅行计划, 每个旅行计划以开始日期li,结束日期ri,以及花费金钱costi描述; ...

随机推荐

  1. es5-class

    1. 通过class定义类/实现类的继承2. 在类中通过constructor定义构造方法3. 通过new来创建类的实例4. 通过extends来实现类的继承5. 通过super调用父类的构造方法6. ...

  2. 浅谈JAVA线程

    一.线程(Thread) 1.线程 线程:是指程序中的顺序流 多线程:一个程序中的多个顺序流同时执行 (1)线程的状态: 新生 就绪 运行 阻塞 终止 (2)学习多线程: 1)线程的创建 2)线程的状 ...

  3. Java IO之处理流

    一.处理流: 增强功能,提供性能,在节点流之上. 二.节点流与处理流的关系 节点流(字节流.字符流)处于IO操作的第一线,所有操作必须通过它们进行: 处理流可以对其他流进行处理(提高效率或操作灵活性) ...

  4. leetcode-12双周赛-1246-删除回文子数组

    题目描述: 方法:区间dp O(N^3) class Solution: def minimumMoves(self, A: List[int]) -> int: N = len(A) dp = ...

  5. TCP三次挥手

    tcp:三次握手 client和server之间需要经历三次握手才能建立连接(connnect()方法中封装了三次握手的步骤)syn:同步请求,建立连接的请求ack:对syn请求包的确认 应答syn: ...

  6. HTML ASCII 参考手册

    HTML 和 XHTML 用标准的 7 比特 ASCII 代码在网络上传输数据. 7 比特 ASCII 代码可提供 128 个不同的字符值. 7 比特 可显示的 ASCII 代码 结果 描述 实体编号 ...

  7. Android中怎么破解游戏之修改金币数

    我们在玩游戏的时候总是会遇到一些东东需要进行购买的,但是我们可能又舍不得花钱,那么我们该怎么办呢?那就是用游戏外挂吧!我们这里说的是Android中的游戏,在网上搜索一下移动端游戏外挂,可能会找到一款 ...

  8. SCP-bzoj-1068

    项目编号:bzoj-1068 项目等级:Safe 项目描述: 戳这里 特殊收容措施: 区间DP.f[l][r][s]表示l到r的子串能最小被压成的长度,其中s∈[0,1]表示该串压缩后串中是否能含有M ...

  9. delete 和 splice 删除数组中元素的区别

    delete 和 splice 删除数组中元素的区别 ` var arr1 = ["a","b","c","d"]; d ...

  10. 杂项-PPT:如何把幻灯片ppt转换成视频

    ylbtech-杂项-PPT:如何把幻灯片ppt转换成视频 1.返回顶部   2.返回顶部   3.返回顶部   4.返回顶部   5.返回顶部 1. https://jingyan.baidu.co ...