传送门

如果选择 $i$ 当陪审团成员,那么 $i$ 认识的猫一定不能参加

又因为总人数和猫数要为 $n$ ,那么 $i$ 认识的猫 的主人也一定要当陪审团成员(不然总数不够)

所以可以考虑这样构图,对每个人 $i$ 向认识的所有猫的主人 $j$ 连边,那么如果选择 $i$ , $i$ 能到达的所有点都必须选择

所以对于一个点双,选其中任意一个就得选全部

如果这样构完图发现整个图只有一个点双,那么一定是 $\text{No}$

否则考虑点双之间构成了一个 $DAG$ ,我们只要选择 $DAG$ 中任意一个没有出度的点双作为陪审团即可,剩下的点全选猫,用反证法容易证明一定合法

任意一个没有出度的点双其实考虑到 $Tarjan$ 的过程发现第一个缩起来的点双一定没有出度,证明同样可以反证法

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<vector>
using namespace std;
typedef long long ll;
inline int read()
{
int x=,f=; char ch=getchar();
while(ch<''||ch>'') { if(ch=='-') f=-; ch=getchar(); }
while(ch>=''&&ch<='') { x=(x<<)+(x<<)+(ch^); ch=getchar(); }
return x*f;
}
const int N=1e6+;
int T,n,m;
int fir[N],from[N<<],to[N<<],cntt;
inline void add(int a,int b) { from[++cntt]=fir[a]; fir[a]=cntt; to[cntt]=b; }
int dfn[N],low[N],bel[N],dfs_clock,cnt;
int st[N],Top;
void Tarjan(int x)
{
st[++Top]=x; dfn[x]=low[x]=++dfs_clock;
for(int i=fir[x];i;i=from[i])
{
int &v=to[i];
if(!dfn[v]) Tarjan(v),low[x]=min(low[x],low[v]);
else if(!bel[v]) low[x]=min(low[x],dfn[v]);
}
if(low[x]!=dfn[x]) return;
cnt++;
while(st[Top]!=x)
bel[st[Top--]]=cnt;
bel[st[Top--]]=cnt;
}
int main()
{
T=read();
while(T--)
{
for(int i=;i<=n;i++) fir[i]=dfn[i]=bel[i]=;
cntt=cnt=dfs_clock=;
n=read(),m=read(); int a,b;
for(int i=;i<=m;i++)
{
a=read(),b=read(); if(a==b) continue;
add(a,b);
}
for(int i=;i<=n;i++) if(!dfn[i]) Tarjan(i);
if(cnt==) { printf("No\n"); continue; }
int ans=; for(int i=;i<=n;i++) if(bel[i]==) ans++;
printf("Yes\n%d %d\n",ans,n-ans);
for(int i=;i<=n;i++) if(bel[i]==) printf("%d ",i); puts("");
for(int i=;i<=n;i++) if(bel[i]!=) printf("%d ",i); puts("");
}
return ;
}

Codeforces 1239D. Catowice City的更多相关文章

  1. [Codeforces 1239D]Catowise City(2-SAT)

    [Codeforces 1239D]Catowise City(2-SAT) 题面 有n个主人,每个主人都有一只猫.每个主人认识一些猫(包括自己的猫).现在要选出一些人和一些猫,个数均大于0且总共为n ...

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

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

  4. 题解-CF1239D Catowice City

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

  5. Codeforces Gym 100015C City Driving 离线LCA

    City Driving 题目连接: http://codeforces.com/gym/100015/attachments Description You recently started fre ...

  6. Codeforces 521E - Cycling City(点双连通分量+分类讨论)

    Codeforces 题面传送门 & 洛谷题面传送门 大家都是暴力找生成树然后跳路径,代码不到 50 行(暴论)的一说--好,那本蒟蒻决定提供一种代码 150 行,但复杂度也是线性的分类讨论做 ...

  7. CF1248F Catowice City

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

  8. Codeforces1248F. Catowice City

    题意:1e6个人每人有一只猫 每个人认识自己的猫 现给出一些关系表示一个人认识某只猫 要选出一些人和一些猫 使得每个人都不认识选出来的猫 且人+猫=n 题解:答案肯定是 一个人的集合和一个猫的集合 那 ...

  9. Codeforces Round #328 (Div. 2) D. Super M 虚树直径

    D. Super M Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/592/problem/D ...

随机推荐

  1. (二十一)JSP基础

    定义 JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术. JSP这门技术的最大的特点在于,写jsp就像在写html,但它相 ...

  2. C#从零单排上王者系列---元组

    从零单排系列说明 博主最初的想法是想写个蜕茧成蝶的系列文章,后来觉得博客的表现形式很难做到连贯和系统.所以从本篇博客开始博主会选择书中比较重要和不好理解的知识点并结合自己的实际工作经验来讲解,不再是照 ...

  3. XML和JSON序列化以及反序列化

    1.将文件保存序列化至文档中,然后再读取: //首先创建可序列化的实体类 [Serializable] public class Message { public string Name { get; ...

  4. C# Task.WhenAll

    1.有时候我们需要同时执行一些操作,然后把这些操作的结果进行汇总,以达到用异步处理降低操作耗时的效果,此时我们会考虑使用Task,而Task.WhenAll则排上了用场. public void Is ...

  5. 整理一下Promise 的用法

    Promise 的定义 Pormise是JS的异步编程的一种解决方案,在ES6将其写进了语言标准,提供了原生的Promise对象. Promise简单来理解就是一个容器,里面存放着某个未来才会结束的事 ...

  6. Android开发中常见问题分析及解决

    最近公司有新的业务需求,需要开发一款APP,因为我开发过Android APP(我想告诉他们,那是4年前的事了,嘤嘤嘤),就把开发任务交给我了,当然也不是我一个人啦,让我组开发小组,说白了,就是让我来 ...

  7. Linux环境下Redis安装和常见问题的解决

    Redis是一款非常非常非常好用的缓存数据库,在保存需要定期更新的Token值,或者在保证高并发安全可靠性的场景下,基本上说是必用了. 安装过好多次Redis了,也用过阿里云Redis数据库,但是每次 ...

  8. OGG 自动重启脚本

    6-20 * * * /oggdata/log/oggautorestart.sh >/oggdata/log/crontab_oggautorestart.log 2>&1 [说 ...

  9. linux-2.6.38 IIC驱动框架分析

    在linux-2.6内核中,IIC的驱动程序可以大概分为三部分: (1)IIC核心代码:/drivers/i2c/i2c-core.c IIC核心提供了IIC总线驱动和设备驱动的注册.注销方法和IIC ...

  10. Oracle 按一行里某个字段里的值分割成多行进行展示

    with t as ( select '111,222,333' col from dual union all select '444,555,666' col from dual ) , leve ...