题目链接

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;
}

最新文章

  1. 魔性の分块 | | jzoj1243 | | 线段树の暴力
  2. HTTP协议学习--- (十一)理解HTTP幂等性
  3. python 集合set
  4. codeforce 621B Wet Shark and Bishops
  5. 360极速浏览器在XP系统下的一个bug
  6. html复选框多行排列布局
  7. sql日志损坏造成数据库置疑解决办法
  8. Linux和win7(win10)双系统时间错误问题 时间相差8小时
  9. Linux命令vi/vim 使用方法讲解
  10. Alpha冲刺5
  11. debug.keystare找不到的解决办法[转]
  12. 进行web开发时应该考虑的架构性因素
  13. 注册系统所有的dll文件.bat
  14. 33Sql数据删除与遍历
  15. iframe高度自适应的6个方法
  16. mysql 位运算
  17. 【Jmeter】压测mysql数据库中间件mycat
  18. django response reuqest
  19. 说明反转控制(IOC)和面向方向编程(AOP)在spring中的应用
  20. Node多进程相关

热门文章

  1. leaflet 结合 Echarts4 实现统计图(附源码下载)
  2. OPENGL 坐标轴转换
  3. 如何用Jpype创建HashMap和ArrayList
  4. MySQL常用SQL语句总结
  5. 【pat】C++之刷题常用STL容器整理
  6. 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
  7. 解决“var/log/sysstat/sa21: 没有那个文件或目录 请检查是否允许数据收集”
  8. oracle相邻表记录交换(单双两两交换)
  9. 深入理解 Java 注解
  10. 连接SpringBootAdmin 异常 Name or service not known