CF1019C Sergey's problem
CF1019C Sergey's problem
很巧妙的构造题。
思路
首先我们可以把这题分成两个部分:
- 解决覆盖问题
- 解决边冲突问题
\(vis_i\) 为 \(i\) 点是否被覆盖的标记,\(cis_i\) 为 \(i\) 点是否被选的标记。
part1 覆盖问题
从小到大枚举 \(i\),对于点 \(i\) 如果它没被覆盖,那么我们把点 \(i\) 标为被覆盖并且使这个点被选中,存在有向边 \(i->j\) 的 \(j\) 标为被覆盖。
part2 冲突问题
从大到小枚举 \(i\),对于点 \(i\) 如果它被选中,那么我们把这个点 \(i\) 存在有向边 \(i->j\) 的点 \(j\) 的选中标记去掉。
这样的答案就是一组合法答案。
证明:
第一个部分,满足了被选中点存在边冲突当且仅当 \(u>v\) 且存在边 \(u->v\) 不存在边 \(v->u\)。
第二个部分,证明:一个点进行了二部分的操作后一定会被留下。
设点 \(u\) 进行完二部分操作后被删除,不妨设删除 \(u\) 的点为 \(v\),那么肯定有 \(u>v\) 且存在边 \(v->u\),与第一部分保证的情况产生冲突,故得证。
\(u\) 删除产生冲突的点后,对于产生冲突的点所覆盖的点,\(u\) 一定可以覆盖到(覆盖距离是 \(2\))。
易得经过一部分后所有的点都已处于被覆盖或被选中的状态,所有经过操作二后,所有的点亦处于被选中或被覆盖的状态。
得证。
CODE
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+5;
struct Edge
{
int tot;
int head[maxn];
struct edgenode{int to,nxt;}edge[maxn*2];
inline void add(int x,int y)
{
tot++;
edge[tot].to=y;
edge[tot].nxt=head[x];
head[x]=tot;
}
}G;
int n,m,tot;
bool vis[maxn],cis[maxn];
inline void solve1(int u)
{
vis[u]=true;cis[u]=true;
for(int i=G.head[u];i;i=G.edge[i].nxt)
{
int v=G.edge[i].to;
vis[v]=true;
}
}
inline void solve2(int u)
{
for(int i=G.head[u];i;i=G.edge[i].nxt)
{
int v=G.edge[i].to;
cis[v]=false;
}
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++)
{
int x,y;
scanf("%d%d",&x,&y);
G.add(x,y);
}
for(int i=1;i<=n;i++) if(!vis[i]) solve1(i);
for(int i=n;i;i--) if(cis[i]) solve2(i);
for(int i=1;i<=n;i++) if(cis[i]) tot++;
printf("%d\n",tot);
for(int i=1;i<=n;i++) if(cis[i]) printf("%d ",i);
}
CF1019C Sergey's problem的更多相关文章
- [CF1019C]Sergey's problem[构造]
题意 找出一个集合 \(Q\),使得其中的点两两之间没有连边,且集合中的点可以走不超过两步到达其他所有不在集合中的点.输出任意一组解. \(n\leq 10^6\) 分析 考虑构造,先从 \(1\) ...
- CF1019C Sergey's problem (图上构造)
题目大意:给你一个有向连通图,让你找出一个点集,保证点集内的点之间没有直接连边,且集合中存在一点,到一个 非点集中的点的距离小于等于2 思路很清奇 首先编号从小到大遍历每个点,如果这个点没有被访问过, ...
- Codeforces Round #503 (by SIS, Div. 2) E. Sergey's problem
E. Sergey's problem [题目描述] 给出一个n个点m条边的有向图,需要找到一个集合使得1.集合中的各点之间无无边相连2.集合外的点到集合内的点的最小距离小于等于2. [算法] 官方题 ...
- Codeforces 1019C Sergey's problem 构造
原文链接https://www.cnblogs.com/zhouzhendong/p/CF1019C.html 题目传送门 - CF1019C 题意 给定一个有 $n$ 个节点 . $m$ 条边的有向 ...
- 【CF1020E】Sergey's problem(构造)
题意: 思路:这是一道论文题 https://link.springer.com/content/pdf/10.1007/BFb0066192.pdf From http://www.cnblogs. ...
- 1019C Sergey's problem(思维)
题意: 找出来一个点集S 使得S中的点不能互相通过一步到达 并且S中的点 可以在小于等于2的步数下到达所有的点 要父结点 不要子结点 这样就求出来一个点集S‘ 而S'中可能存在 v -> u ...
- Sergey's problem CodeForces - 1019C (图论,构造,神题)
链接 大意: 给定有向图, 求选择一个点集$S$, 使得$S$任意两点不相连, 且对于不属于$S$的任意点$x$, 均存在$S$中的点$y$, 使得$d(x,y)<=2$, $d(x,y)$为从 ...
- 【Cf #503 C】Sergey's problem(有趣的构造)
感觉这种构造题好妙啊,可我就是想不到诶. 给出一张无自环的有向图,回答一个独立集,使得图中任意一点都可以被独立集中的某一点两步之内走到. 具体构造方案如下: 下标从小到大枚举点,如果该点没有任何标记, ...
- Codeforces Round #503 (by SIS, Div. 2) Solution
从这里开始 题目列表 瞎扯 Problem A New Building for SIS Problem B Badge Problem C Elections Problem D The hat P ...
- Codeforces Round #503 Div. 2
时间相对来说还是比较合适的,正好放假就可以打一打啦. A. New Building for SIS:http://codeforces.com/contest/1020/problem/A 题意概述 ...
随机推荐
- SpringBoot 用的 spring-jcl 打印日志,与 LoggingSystem 有鸡毛关系?
开心一刻 现实中,我有一个异性游戏好友,昨天我心情不好,找她聊天 我:我们两个都好久没有坐下来好好聊天了 她:你不是有女朋友吗 我:人家不需要我这种穷人啊 她:难道我需要吗 前情回顾 从源码分析 Sp ...
- .net framework创建Nuget包简要教程
前言 nuget包生成在.net framework和.net core/.net standard下的是不同的. .net framework中稍微复杂些,下面记录了我自己在.net framewo ...
- centos上yum无法使用的问题以及无法用yum安装screen,iftop,nethogs等的解决办法
大家可能都发现了centos8已经不在更新了.当我们使用yum安装某些工具的时候,会提示安装源失败 解决方案:删除repo文件 然后重新下载即可修复yum安装报错问题1.进入/etc/yum.repo ...
- Dev-C++ 安装教程
下载地址:https://sourceforge.net/projects/orwelldevcpp/ 下载完成,在指定的下载位置有一个安装包: 双击开始安装程序 安装是默认英文安装即可,在启动后可以 ...
- 淘宝开放平台api申请,淘宝开放平台api租用,淘宝开放平台api无法申请,淘宝开放平台api暂停接入
目前淘宝开放平台应用申请是关闭了的,已经无法申请到了,如果你是天猫店铺,可以申请供自己店铺使用的权限,如果你不是天猫店铺或者你是软件开发商,目前是申请不到权限的 如果你必须要用到这个权限包的话,可以联 ...
- MYSQL数据库设计1
简单记录一下如何设计MySQL数据库 1.画出概念模型,概念模型是一个业务关系对照图,不需要定义字段类型什么的,仅仅是用于关系对照,指出对照关系 2.根据概念模型设计逻辑模型,逻辑模型需要包含字段的设 ...
- 使用Hexo主题搭建个人博客(markdown)
依赖环境 安装node.js:node.js下载可以从其官方界面开始https://nodejs.org/zh-cn/ 安装git:git下载则可以从其官方界面开始https://git-scm.co ...
- Qt连连看(一)需求分析
虽然开发经验并不多,但是结合以往的一点实践项目和理论学习,自认为不管是开发什么工程项目,只要遵循软件工程的构建原则,如选择一个合理的架构体系,再掌握一门语言,利用数据结构组织数据,算法实现想法和功能, ...
- postgre基于行数的外连接及python连接postgre数据库
外连接 左外/右外连接 左外连接:左表全部出现在结果集中,若右表无对应记录,则相应字段为NULL left join ... on 条件 右外连接:右表全部出现在结果集中,若左表无对应记录,则相应字段 ...
- 离线安装Nginx
离线安装nginx gcc-c++ 该链接内有安装nginx所需的环境 openssl.pcre.zlib 直接执行该命令安装即可 rpm -Uvh *.rpm --nodeps --force 将下 ...