CF1248F Catowice City
2024-09-01 10:22:59
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;
}
最新文章
- 魔性の分块 | | jzoj1243 | | 线段树の暴力
- HTTP协议学习--- (十一)理解HTTP幂等性
- python 集合set
- codeforce 621B 	 Wet Shark and Bishops
- 360极速浏览器在XP系统下的一个bug
- html复选框多行排列布局
- sql日志损坏造成数据库置疑解决办法
- Linux和win7(win10)双系统时间错误问题 时间相差8小时
- Linux命令vi/vim 使用方法讲解
- Alpha冲刺5
- debug.keystare找不到的解决办法[转]
- 进行web开发时应该考虑的架构性因素
- 注册系统所有的dll文件.bat
- 33Sql数据删除与遍历
- iframe高度自适应的6个方法
- mysql 位运算
- 【Jmeter】压测mysql数据库中间件mycat
- django response reuqest
- 说明反转控制(IOC)和面向方向编程(AOP)在spring中的应用
- Node多进程相关
热门文章
- leaflet 结合 Echarts4 实现统计图(附源码下载)
- OPENGL 坐标轴转换
- 如何用Jpype创建HashMap和ArrayList
- MySQL常用SQL语句总结
- 【pat】C++之刷题常用STL容器整理
- error: (-210:Unsupported format or combination of formats) [Start]FindContours supports only CV_8UC1 images when mode != CV_RETR_FLOODFILL otherwise supports CV_32SC1 images only in
- 解决“var/log/sysstat/sa21: 没有那个文件或目录 请检查是否允许数据收集”
- oracle相邻表记录交换(单双两两交换)
- 深入理解 Java 注解
- 连接SpringBootAdmin 异常 Name or service not known