cf1228 D Complete Tripartite(哈希)】的更多相关文章

题意: 无向简单图,无自环,无重边,n个点,m条边,请你将这n个点分为3个互相没有交集的集合.并且满足以下条件: 1.同一个集合中的任意两点之间没有边. 2.每个点都要与除了它这个集合以外的所有点相连. 没有答案就输出-1,多种答案输出任意一种. 思路: 用hash值代表与一个点相连的 都有哪些点, 如果出现三种hash值就没有答案: 如果有一个点的度为0,也没有答案: 根据哈希值,点被分为三份,如果每一份的点数+它们所连的点的点数 != n,也没有答案: 如果同一条边相连的两个点的哈希值相同,…
D - Complete Tripartite 思路:这个题是个染色问题.理解题意就差不多写出来一半了.开始的时候还想用离散化来储存每个点的状态,即它连接的点有哪些,但很无奈,点太多了,long long范围内肯定存不完,于是想到用python来写,但是 py 也没有很熟练.....便放弃了. 需要注意的: 要统计总共有多少颜色,不然会漏掉只有两种颜色的情况,这种情况是输出-1的.还有前向星存边的时候记得开两倍. 代码: // Created by CAD on 2019/10/2. #incl…
思路: 任选一点a,和a没有边直接相连的点一定和a在同一个集合,由此构造得到一个集合A.用类似的方法再构造一个集合B,并将剩下的点放在集合C中,就得到了三个集合A,B,C.再检查A,B,C是否符合要求即可. 实现: #include <bits/stdc++.h> using namespace std; ; vector<int> G[N]; int res[N]; int main() { int n, m; while (cin >> n >> m)…
这个 D 还是十分友好的~ 你发现这 $3$ 个集合形成了一个环的关系,所以随意调换顺序是无所谓的. 然后随便让 $1$ 个点成为第 $2$ 集合,那么不与这个点连边的一定也属于第二集合. 然后再随便找一个与所选点有连边的点,将这个设为第 $3$ 集合中的点,然后与这个点有连边且不为第二集合的就是第一集合的. 构造出了 $3$ 个集合后再判断一下是否不合法即可. 几个判断方式: 1. 一个集合中不能有连边 2. 任意一个集合中所有点出边的数量应该相同. 3. 任何一个点集都不能为空. #incl…
链接: https://codeforces.com/contest/1228/problem/D 题意: You have a simple undirected graph consisting of n vertices and m edges. The graph doesn't contain self-loops, there is at most one edge between a pair of vertices. The given graph can be disconne…
传送门 不妨设 $1$ 号点在集合 $1$ 里 那么对于其他点,有且只有所有和 $1$ 没有边的点都在集合 $1$ 里 考虑不在集合 $1$ 的任意一个点 $x$ ,不妨设它在集合 $2$ 里 那么所有不在集合 $1$ 的,和 $x$ 没有边的点都在集合 $2$ 里,剩下的点都一定在集合 $3$ 里 所以集合划分完毕,然后就是判断合法性了,特判当然是越多越好啦! #include<iostream> #include<cstdio> #include<algorithm>…
[链接] 我是链接,点我呀:) [题意] 题意 [题解] 其实这道题感觉有点狗. 思路大概是这样 先让所有的点都在1集合中. 然后随便选一个点x,访问它的出度y 显然tag[y]=2 因为和他相连了嘛 然后其他没有和x相连的点显然只能和x在同一个集合中 所以其他1集合的点你会发现你想改也没法改,就算他们有可能连在一起也没用,因为你不可能再把其他的1改成2了,因为会和你之前选的A冲突(和这个你想 改的2没有边相连) 这就是这题的主要ideal,就是抓住这一点做文章. 然后接着,我们仍然是随便找一个…
题目链接 大致题意 把一个图分成三块,要求任意两块之间是完全图,块内部没有连线 分析 首先根据块内没有连线可以直接分成两块 假定点1是属于块1的,那么所有与点1连接的点,都不属于块1:反之则是块1的 然后在所有不属于块1的点内随意找一点k,设定其属于块2,那么所有与点k连接的点且不属于块1,则是块3. 块分完了,然后是判断每个块是否满足条件,我通过下面三条来判断 1.每个块都有点 2.每个块内部没有连线,即没有一条线的两个端点在同一个块内 3.每个块内的点的度等于其他两个块的点个数和也等于n减去…
三分图染色 链接:https://codeforces.com/contest/1228/problem/D 三分图染色步骤:First 首先找一个点1作为集合A中的点,再找到与1相连的一个点设为2,作为集合2中的首元素,再找到与1和2相连的一个点作为集合三的元素. Second 枚举每一个点,判断该点是否同时与原先定义的三个点其中的两个相连,如果不相连则退出,输出-1. Third,判断当前的点构成的边,与总边数是否相等,如果不相等则输出-1 Fourth  判断自己集合中的点时候有边: AC…
Link 题目大意:给定一个无向图,将它划分为三个点集,要求在一个点集中的点没有边相连,且颜色相同,不同集合中的点互相有边相连. \(\text{Solution:}\) 我们发现,与一个点之间没有边相连的一定在同一个集合. 因为如果有边相连就已经违反了一个性质. 那么我们可以轻易确定一个集合.剩下的任务就是在剩下的点中确定另外两个集合. 我们遍历剩下没有确定的所有集合,随意找到一个点,将所有与它相连的.未染色的点划分为一个集合. 这样,剩下的点就是另一个集合. 证明: 对于除去已经确定的集合中…