【Code Force】Round #589 (Div. 2) D、Complete Tripartite
大致题意
把一个图分成三块,要求任意两块之间是完全图,块内部没有连线
分析
首先根据块内没有连线可以直接分成两块
假定点1是属于块1的,那么所有与点1连接的点,都不属于块1;反之则是块1的
然后在所有不属于块1的点内随意找一点k,设定其属于块2,那么所有与点k连接的点且不属于块1,则是块3。
块分完了,然后是判断每个块是否满足条件,我通过下面三条来判断
1、每个块都有点
2、每个块内部没有连线,即没有一条线的两个端点在同一个块内
3、每个块内的点的度等于其他两个块的点个数和也等于n减去当前块内的点数
AC Code
(暴力就完事)
#include <bits/stdc++.h>
using namespace std;
#define MAXN 101000
int fa[MAXN]; // 保存了点属于哪个块
int deg[MAXN]; // 保存了点的度
pair<int, int> edge[MAXN * 3];
void solve() {
int n, m;
cin >> n >> m;
int f2 = 2; // f2 用来找块2
for (int i = 0; i < m; ++i) {
int u, v;
cin >> u >> v;
deg[u]++;
deg[v]++;
edge[i] = {u, v};
if (u == 1) {
fa[v] = 1;
f2 = v;
} else if (v == 1) {
fa[u] = 1;
f2 = u;
}
}
// 找出第三块
for (int i = 0; i < m; ++i) {
if (edge[i].first == f2 && fa[edge[i].second] == 1)
fa[edge[i].second] = 2;
else if (edge[i].second == f2 && fa[edge[i].first] == 1)
fa[edge[i].first] = 2;
}
int cnt[3] = {n, n, n}; // 保存了每个块内点的个数
// 需要变成完全图需要多少条边
for (int i = 0; i < n; ++i)
cnt[fa[i + 1]]--;
// 块内的入度是否符合条件
for (int i = 0; i < n; ++i) {
if (deg[i + 1] != cnt[fa[i + 1]]) {
cout << -1 << endl;
return;
}
}
// 每个块是否为空
if (cnt[0] == n || cnt[1] == n || cnt[2] == n) {
cout << -1 << endl;
return;
}
// 内部连线
for (int i = 0; i < m; ++i) {
if (fa[edge[i].first] == fa[edge[i].second]) {
cout << -1 << endl;
return;
}
}
for (int i = 0; i < n - 1; ++i)
cout << fa[i + 1] + 1 << " ";
cout << fa[n] + 1 << endl;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
#ifdef ACM_LOCAL
freopen("in.txt", "r", stdin);
freopen("out.txt", "w", stdout);
long long test_index_for_debug = 1;
char acm_local_for_debug;
while (cin >> acm_local_for_debug) {
cin.putback(acm_local_for_debug);
if (test_index_for_debug > 20) {
throw runtime_error("Check the stdin!!!");
}
auto start_clock_for_debug = clock();
solve();
auto end_clock_for_debug = clock();
cout << "Test " << test_index_for_debug << " successful" << endl;
cerr << "Test " << test_index_for_debug++ << " Run Time: "
<< double(end_clock_for_debug - start_clock_for_debug) / CLOCKS_PER_SEC << "s" << endl;
cout << "--------------------------------------------------" << endl;
}
#else
solve();
#endif
return 0;
}
总之一句话,暴力就完事了。反正边不多,我已经懒得优化了
【Code Force】Round #589 (Div. 2) D、Complete Tripartite的更多相关文章
- 【Codeforces】Round #491 (Div. 2) 总结
[Codeforces]Round #491 (Div. 2) 总结 这次尴尬了,D题fst,E没有做出来.... 不过还好,rating只掉了30,总体来说比较不稳,下次加油 A:If at fir ...
- 【Codeforces】Round #488 (Div. 2) 总结
[Codeforces]Round #488 (Div. 2) 总结 比较僵硬的一场,还是手速不够,但是作为正式成为竞赛生的第一场比赛还是比较圆满的,起码没有FST,A掉ABCD,总排82,怒涨rat ...
- Codeforces Round #589 (Div. 2)-E. Another Filling the Grid-容斥定理
Codeforces Round #589 (Div. 2)-E. Another Filling the Grid-容斥定理 [Problem Description] 在\(n\times n\) ...
- 【ABAP系列】SAP ABAP WS_DELIVERY_UPDATE 修改数量、过账日期并发货过账
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP WS_DELI ...
- 2.5 【配置环境】多浏览器驱动 (chrome、IE、Firefox)❀
来源:http://blog.csdn.net/huilan_same/article/details/51896672 http://www.cnblogs.com/thinkCoding/p/64 ...
- 关于注释【code templates】,如何导入本地注释文件
关于如何在eclipse.myeclipse导入本地注释文件 [xxx.xml] 请看操作方式 下面是code templates文件的内容 注意 把文件中的 @@@@@@@@@@@@@@@ ...
- Codeforces Round #589 (Div. 2)
目录 Contest Info Solutions A. Distinct Digits B. Filling the Grid C. Primes and Multiplication D. Com ...
- 【日常小记】统计后缀名为.cc、.c、.h的文件数【转】
转自:http://www.cnblogs.com/skynet/archive/2011/03/29/1998970.html 在项目开发时,有时候想知道源码文件中有多少后缀名为.cc..c..h的 ...
- 【树莓派】【网摘】树莓派与XBMC及Kodi、LibreELEC插件(三)
之前的相关文章参考: [树莓派]树莓派与XBMC及Kodi.LibreELEC插件(一) [树莓派]树莓派与XBMC及Kodi.LibreELEC插件(二) [树莓派]树莓派与XBMC及Kodi.Li ...
随机推荐
- C++银行储蓄程序代码
*/ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...
- java集合-set
#java集合-set Map用于存储key-value的映射,其中key的值是不能重复的.并且还需要正确的覆写equals方法和hashCode方法 如果我们只需要存储不重复的key,并不需要存储对 ...
- python 实现各种进度条
1. 时间进度条 class Tiao(object): def __init__(self): self.obj1 = datetime.timedelta(seconds=1) self.var ...
- 压力测试(九)-Jmeter压测课程总结和架构浅析
安装常见问题 1.问题 [root@iZwz95j86y235aroi85ht0Z bin]# ./jmeter-server Created remote object: UnicastServer ...
- 攻防世界Mobile5 EasyJNI 安卓逆向CTF
EasyJNI 最近正好在出写JNI,正好看到了一道JNI相关的较为简单明了的CTF,就一时兴起的写了,不得不说逆向工程和正向开发确实是可以互补互相加深的 JNI JNI(Java Native In ...
- spring——AOP原理及源码(四)
前情回顾: 上文我们一路分析了从容器创建开始直到我们的AOP注解导入的核心组件AnnotationAwareAspectJAutoProxyCreator执行postProcessBeforeInst ...
- JZOJ 5246. 【NOIP2017模拟8.8A组】Trip(trip)
5246. [NOIP2017模拟8.8A组]Trip(trip) (File IO): input:trip.in output:trip.out Time Limits: 1500 ms Memo ...
- 『配置』服务器搭建 Office Online Server2016 实现文档预览
博主有话说:这个过程我遇到了很多错误,所以出了一个错误整理文章,所以当你在配置过程中遇到了问题,可以先去这篇文章里找找!加油! 先打开我吧:https://www.cnblogs.com/pukua/ ...
- 【OO第三次课下讨论】农场主的饲料分配问题
需求分析与项目设计 本思考题的设计需求是力图找到一个简单且可行的饲料分配方案,由于不涉及到饲料价格或者是营养均衡之类的优化问题,因此在假设总的饲料量必能满足所有动物的热量需求的前提下,我们只需要采 ...
- url参数格式化
getQueryBbj = (url)=>{ let urlData = url.split("?")[1]; let queryArr = urlData.split('& ...