题意:1e6个人每人有一只猫 每个人认识自己的猫 现给出一些关系表示一个人认识某只猫

   要选出一些人和一些猫 使得每个人都不认识选出来的猫 且人+猫=n

题解:答案肯定是 一个人的集合和一个猫的集合

   那么对于某个人 他要么在这个答案集合中 要么不在 我们考虑第一个人

   先考虑这个人在答案集合中 如果这个人认识某只猫 那么拥有这只猫的主人显然也应该放在答案集合中

   所以不停把人放入队列进来 如果最后这个人的集合没有n个人 则是一种合法的方案

   然后考虑第一个人不在答案集合中 那么逆向思维等于我们选了第一个人的猫 如果某个人认识这只猫

   那么这个人的猫也应该放在猫的集合里 瞎搞搞就完了

#include <bits/stdc++.h>
using namespace std; int n, m, l, r;
vector<int> g[2][1000005];
int que[1000005];
int vis[1000005];
void solve(int typ) {
for(int i = 1; i <= n; i++) vis[i] = 0;
l = 1, r = 0;
que[++r] = 1; vis[1] = 1; while(l <= r) {
int u = que[l]; l++;
for(int i = 0; i < g[typ][u].size(); i++) {
int v = g[typ][u][i];
if(!vis[v]) {
vis[v] = 1;
que[++r] = v;
}
}
}
} int main() {
int T;
scanf("%d", &T);
while(T--) {
scanf("%d%d", &n, &m);
for(int i = 1; i <= n; i++) g[0][i].clear(), g[1][i].clear();
for(int i = 1; i <= m; i++) {
int x, y;
scanf("%d%d", &x, &y);
if(x == y) continue;
g[0][x].push_back(y);
g[1][y].push_back(x);
} solve(0);
if(r != n) {
puts("Yes");
printf("%d %d\n", r, n - r);
for(int i = 1; i <= r; i++) printf("%d ", que[i]);
puts("");
for(int i = 1; i <= n; i++) if(!vis[i]) printf("%d ", i);
puts("");
continue;
}
solve(1);
if(r != n) {
puts("Yes");
printf("%d %d\n", n - r, r);
for(int i = 1; i <= n; i++) if(!vis[i]) printf("%d ", i);
puts("");
for(int i = 1; i <= r; i++) printf("%d ", que[i]);
puts("");
continue;
}
puts("No");
}
return 0;
}

  

Codeforces1248F. Catowice City的更多相关文章

  1. 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 ...

  2. 并不对劲的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+' ...

  3. 题解-CF1239D Catowice City

    CF1239D Catowice City 有 \(n\) 个人和 \(n\) 只猫.有 \(m\) 对人猫友谊,即第 \(u_i\) 个人认识第 \(v_i\) 只猫,保证第 \(i\) 个人和第 ...

  4. CF1248F Catowice City

    题目链接 problem 有\(n\)个人,每个人家有一只猫.每个人都认识一些猫(其中肯定包括自己家的猫).选出\(j\)个人和\(k\)只猫\((j,k\ge 1)\).使得\(j+k=n\)且选出 ...

  5. Codeforces 1239D. Catowice City

    传送门 如果选择 $i$ 当陪审团成员,那么 $i$ 认识的猫一定不能参加 又因为总人数和猫数要为 $n$ ,那么 $i$ 认识的猫 的主人也一定要当陪审团成员(不然总数不够) 所以可以考虑这样构图, ...

  6. 一句话CF

    目录 \(\bf {Round \ \#500 \ (Div. \ 1)}\) \(\bf {Round \ \#589 \ (Div. \ 2)}\) \(\bf {Avito \ Cool \ C ...

  7. Codeforces Round #594 (Div. 2)

    传送门 C. Ivan the Fool and the Probability Theory 题意: 给出一个\(n*m\)的方格,现在要给方格中的元素黑白染色,要求任一颜色最多有一个颜色相同的格子 ...

  8. 【CodeForces】CodeForcesRound594 Div1 解题报告

    点此进入比赛 \(A\):Ivan the Fool and the Probability Theory(点此看题面) 大致题意: 给一个\(n\times m\)的矩阵\(01\)染色,使得不存在 ...

  9. Codeforces Round #594 (Div. 1)

    Preface 这场CF真是细节多的爆炸,B,C,F都是大细节题,每道题都写了好久的说 CSP前的打的最后一场比赛了吧,瞬间凉意满满 希望CSP可以狗住冬令营啊(再狗不住真没了) A. Ivan th ...

随机推荐

  1. 用python做youtube自动化下载器 代码

    目录 项目地址 思路 流程 1. post i. 先把post中的headers格式化 ii.然后把参数也格式化 iii. 最后再执行requests库的post请求 iv. 封装成一个函数 2. 调 ...

  2. Oracle误删数据的恢复

    Oracle误删数据的恢复,分为两种方法:SCN和时间戳两种方法恢复. 一.通过SCN恢复删除且已提交的数据 1.获得当前数据库的SCN号 select current_scn from v$data ...

  3. IPC 经典问题:Sleeping Barber Problem

    完整代码实现: #include <stdio.h> #include <unistd.h> #include <time.h> #include <stdl ...

  4. redis 5.0.5 安装

    redis 5.0.5 安装脚本: #!/bin/bash cd /data/src/ test -e tcl8.6.9-src.tar.gz || wget http://downloads.sou ...

  5. memcached+magent的集群部署详细过程

    问题描述 Memcached在实现分布集群部署时, Memcached服务端的之间是没有通讯的,服务端是伪分布式,实现分布式是由客户端实现的,客户端实现了分布式算法把数据保存到不同的Memcached ...

  6. Linux echo和cat和grep和tr的基础用法

    Linux vim   搜索 echo  :   显示输出功能 echo oldboy>1.txtx cat 1.txtx >  重定向   文件内容覆盖 >> 追加重定向   ...

  7. 【源码解读】js原生消息提示插件

    效果如下: 关闭message后前后message的衔接非常丝滑,这部分是我比较感兴趣的.带着这个问题先了解下DOM结构,顺便整理下作者的思路. 从DOM里我们可以看到所有的message都在一个容器 ...

  8. 【Azure Developer】已发布好的.NET Core项目文件如何打包为Docker镜像文件

    问题描述 在博文([Azure App Service For Container]创建ASP.NET Core Blazor项目并打包为Linux镜像发布到Azure应用服务)中我们通过VS 201 ...

  9. web项目启动链接mysql巨慢

    说明:项目部署到测试服务器上,mysql部署在另一台服务器上,项目第一次启动之后登陆后台很慢,大概30s左右,经查发现第一次访问数据库的时候会通过DNS解析客户端机器域名,mysql还有DNS反向解析 ...

  10. 基于scrapy框架的分布式爬虫

    分布式 概念:可以使用多台电脑组件一个分布式机群,让其执行同一组程序,对同一组网络资源进行联合爬取. 原生的scrapy是无法实现分布式 调度器无法被共享 管道无法被共享 基于 scrapy+redi ...