CF1248F Catowice City
problem
有\(n\)个人,每个人家有一只猫。每个人都认识一些猫(其中肯定包括自己家的猫)。选出\(j\)个人和\(k\)只猫\((j,k\ge 1)\)。使得\(j+k=n\)且选出的人和猫都互不认识。
solution
一个显然但是重要的推论是:
每个人家都必须去一个人或者一只猫。
这样我们只需要枚举第一个人家去的是人还是猫,就可以根据他们之间的关系推出其他的人家是人还是猫。当无论第一家选择人还是选择猫,都会导致去\(n\)只猫或者\(n\)个人时无解。
code
#include<cstdio>
#include<queue>
#include<vector>
#include<algorithm>
#include<iostream>
#include<cstring>
#include<ctime>
using namespace std;
typedef long long ll;
const int N = 1000100;
ll read() {
ll x = 0,f = 1;char c = getchar();
while(c < '0' || c > '9') {
if(c == '-') f = -1;c = getchar();
}
while(c >= '0' && c <= '9') {
x = x * 10 + c - '0';
c = getchar();
}
return x * f;
}
vector<int>e1[N],e2[N];
int vis[N],cnt;
void dfs(int u) {
vis[u] = 1;cnt++;
for(vector<int>::iterator it = e1[u].begin();it != e1[u].end();++it) {
if(vis[*it]) continue;
dfs(*it);
}
}
void dfs2(int u) {
vis[u] = 1;cnt++;
for(vector<int>::iterator it = e2[u].begin();it != e2[u].end();++it) {
if(vis[*it]) continue;
dfs2(*it);
}
}
int main() {
int T = read();
while(T--) {
int n = read(),m = read();
cnt = 0;
for(int i = 1;i <= n;++i) vis[i] = 0;
for(int i = 1;i <= n;++i) e1[i].clear(),e2[i].clear();
for(int i = 1;i <= m;++i) {
int u = read(),v = read();
e1[u].push_back(v);e2[v].push_back(u);
}
dfs(1);
int bz = 1;
if(cnt == n) {
cnt = 0;
for(int i = 1;i <= n;++i) vis[i] = 0;
dfs2(1);
if(cnt == n) {puts("No");continue;}
cnt = n - cnt;
bz = 0;
}
puts("Yes");
printf("%d %d\n",cnt,n - cnt);
for(int i = 1;i <= n;++i) {
if(vis[i] == bz) printf("%d ",i);
}
puts("");
for(int i = 1;i <= n;++i) {
if(vis[i] != bz) printf("%d ",i);
}
puts("");
}
return 0;
}
CF1248F Catowice City的更多相关文章
- Codeforces Round #594 (Div. 1) D. Catowice City 图论
D. Catowice City In the Catowice city next weekend the cat contest will be held. However, the jury m ...
- 并不对劲的CF1239B&C&D Programming Task in the Train to Catowice City
CF1239B The World Is Just a Programming Task 题目描述 定义一个括号序列s是优秀的,当且仅当它是以下几种情况的一种: 1.|s|=0 2.s='('+t+' ...
- 题解-CF1239D Catowice City
CF1239D Catowice City 有 \(n\) 个人和 \(n\) 只猫.有 \(m\) 对人猫友谊,即第 \(u_i\) 个人认识第 \(v_i\) 只猫,保证第 \(i\) 个人和第 ...
- Codeforces 1239D. Catowice City
传送门 如果选择 $i$ 当陪审团成员,那么 $i$ 认识的猫一定不能参加 又因为总人数和猫数要为 $n$ ,那么 $i$ 认识的猫 的主人也一定要当陪审团成员(不然总数不够) 所以可以考虑这样构图, ...
- Codeforces1248F. Catowice City
题意:1e6个人每人有一只猫 每个人认识自己的猫 现给出一些关系表示一个人认识某只猫 要选出一些人和一些猫 使得每个人都不认识选出来的猫 且人+猫=n 题解:答案肯定是 一个人的集合和一个猫的集合 那 ...
- 一句话CF
目录 \(\bf {Round \ \#500 \ (Div. \ 1)}\) \(\bf {Round \ \#589 \ (Div. \ 2)}\) \(\bf {Avito \ Cool \ C ...
- Codeforces Round #594 (Div. 2)
传送门 C. Ivan the Fool and the Probability Theory 题意: 给出一个\(n*m\)的方格,现在要给方格中的元素黑白染色,要求任一颜色最多有一个颜色相同的格子 ...
- 【CodeForces】CodeForcesRound594 Div1 解题报告
点此进入比赛 \(A\):Ivan the Fool and the Probability Theory(点此看题面) 大致题意: 给一个\(n\times m\)的矩阵\(01\)染色,使得不存在 ...
- Codeforces Round #594 (Div. 1)
Preface 这场CF真是细节多的爆炸,B,C,F都是大细节题,每道题都写了好久的说 CSP前的打的最后一场比赛了吧,瞬间凉意满满 希望CSP可以狗住冬令营啊(再狗不住真没了) A. Ivan th ...
随机推荐
- Docker Compose部署GitLab服务,搭建自己的代码托管平台(图文教程)
场景 Docker-Compose简介与Ubuntu Server 上安装Compose: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/deta ...
- KVO-键值监听
键值监听,就是可以监听对象某个属性值的变化: 首先,在工程中,新建一个Person的类 @interface Person : NSObject @property (nonatomic, copy) ...
- php7深入理解匿名函数和回调函数
匿名函数是没有名称的函数,可以将函数赋值给变量,再调用使用,回调函数是指作为一个参数值传值另外一个函数使用的函数. //匿名函数 没名称的函数 $a=function (){echo "ww ...
- qt 自定义控件窗口提升
- VS 2017 中取消自动补全花括号
输入 "{", VS 会很智能的给你补全,得到 “{}”, 如果不想享受这个服务,可以按以下设置取消: Tools -> Options -> Text Editor ...
- 使用admin的步骤、必知必会13条、单表的双下划线、外键的操作、多对多的操作:
MVC M: model 模型 与数据库交互 V: view 视图 HTML C:controller 控制器 流程 和 业务逻辑 MTV M:model ORM T:template 模板 HTML ...
- opencv加载图片imread失败的原因
用简单的imshow函数加载图片,报加载失败的异常,显示没有将图片加载到内存中.原因是在配置环境是同时将*lib与*d.lib都入了附加依赖项,而项目的生成方式选择的是debug,*lib在*d.li ...
- Eclipse使用Maven jetty/tomcat:run命令启动web项目
Eclipse安装好m2e插件,使用Maven构建项目后,启动web项目就行就非常简单了,如下所示. 操作步骤: 1.右键你的项目 -> Run As -> Run Configurati ...
- ETCD:系统限制
原文地址:System limits 请求大小限制 etcd被设计用来处理小键值对典型的如元数据.较大的请求数据也起作用,但可能会增加其他请求的延迟.默认情况下,任意的请求最大的空间为1.5MiB,这 ...
- golang-基础
1.go的特点 兼具动态语言的开发效率与C,C++,java的性能安全性 ,内置编译器 2.go的安装 go的sdk下载: https://studygolang.com/dl go的IDE下载: ...