E. Sergey's problem

【题目描述】

给出一个n个点m条边的有向图,需要找到一个集合使得1、集合中的各点之间无无边相连2、集合外的点到集合内的点的最小距离小于等于2。

【算法】

官方题解证明的很强。对任意一个点 a(未访问过)删去其所有子节点,若剩余点组成的新图的答案集合不存在到 a 的边,则将 a 加入答案集合中;否则 删去a。一遍正向对 1~n 的每一个点遍历,保留父节点打上标记 -1,子节点打上标记 1。下一步就是删去不满足条件的点,对任意一个标有 -1 的点 i,首先应该找到剩余点的答案集合(即从 i+1 到 n 的所有满足条件的点),于是我们可以考虑从 n ~ 1 逆向遍历,这样即可满足条件。

给出一个反例(不太会用graphviz,逃。。。。):



如果正向删的话,只留下了e点显然gg。

【代码】

  1. #include <bits/stdc++.h>
  2. #define N 1000100
  3. using namespace std;
  4. int n,m,a,b,ans;
  5. int v[N];
  6. vector<int> head[N];
  7. inline int read() {
  8. int x=0,f=1; char c=getchar();
  9. while(c<'0'||c>'9') { if(c=='-') f=-1; c=getchar(); }
  10. while(c>='0'&&c<='9') { x=x*10+c-'0'; c=getchar(); }
  11. return x*f;
  12. }
  13. int main() {
  14. n=read(),m=read();
  15. for(int i=1;i<=m;i++) a=read(),b=read(),head[a].push_back(b);
  16. for(int i=1;i<=n;i++) {
  17. if(v[i]) continue;
  18. int sz=head[i].size();
  19. v[i]=-1;
  20. for(int j=0;j<sz;j++) {
  21. if(v[head[i][j]]) continue;
  22. v[head[i][j]]=1;
  23. }
  24. }
  25. for(int i=n;i>=1;i--) {
  26. if(v[i]==1) continue;
  27. ans++;
  28. int sz=head[i].size();
  29. for(int j=0;j<sz;j++)
  30. v[head[i][j]]=1;
  31. }
  32. cout<<ans<<endl;
  33. for(int i=1;i<=n;i++)
  34. if(v[i]==-1) cout<<i<<" ";
  35. return 0;
  36. }

Codeforces Round #503 (by SIS, Div. 2) E. Sergey's problem的更多相关文章

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

  2. Codeforces Round #503 (by SIS, Div. 2)

    连接:http://codeforces.com/contest/1020 C.Elections 题型:你们说水题就水题吧...我没有做出来...get到了新的思路,不虚.好像还有用三分做的? KN ...

  3. Codeforces Round #503 (by SIS, Div. 2) C. Elections (暴力+贪心)

    [题目描述] Elections are coming. You know the number of voters and the number of parties — n and m respe ...

  4. Codeforces Round #503 (by SIS, Div. 2)-C. Elections

    枚举每个获胜的可能的票数+按照花费排序 #include<iostream> #include<stdio.h> #include<string.h> #inclu ...

  5. Codeforces Round #503 (by SIS, Div. 1)E. Raining season

    题意:给一棵树每条边有a,b两个值,给你一个m,表示从0到m-1,假设当前为i,那么每条边的权值是a*i+b,求该树任意两点的最大权值 题解:首先我们需要维护出(a,b)的凸壳,对于每个i在上面三分即 ...

  6. Codeforces Round #503 (by SIS, Div. 2) D. The hat

    有图可以直观发现,如果一开始的pair(1,1+n/2)和pair(x, x+n/2)大小关系不同 那么中间必然存在一个答案 简单总结就是大小关系不同,中间就有答案 所以就可以使用二分 #includ ...

  7. Codeforces Round #503 (by SIS, Div. 2)B 1020B Badge (拓扑)

    题目大意:每个同学可以指定一个人,然后构成一个有向图.1-n次查询,从某个人开始并放入一个东西,然后循环,直到碰到一个人已经放过了,就输出. 思路:直接模拟就可以了,O(n^2) 但是O(n)也可以实 ...

  8. Codeforces Round #503 (by SIS, Div. 2) C. Elections(枚举,暴力)

    原文地址 C. Elections time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...

  9. Codeforces Round #503 (by SIS, Div. 2) D. The hat -交互题,二分

    cf1020D 题意: 交互题目,在有限的询问中找到一个x,使得数列中的第x位和第(x+n/2)位的值大小相同.数列保证相邻的两个差值为1或-1: 思路: 构造函数f(x) = a[x] - a[x ...

随机推荐

  1. 创建一个Django项目

    创建一个django项目: 1. django-admin  startproject student_manage(项目名) 2. cd student_manage python manage.p ...

  2. js for循环 框架内部的

    var head001 =true; var head002 = true; var head003 = true; ; h++) { console.log(h); } h=; ;h < ; ...

  3. XML 浏览器支持

    几乎所有的主流浏览器均支持 XML 和 XSLT. Mozilla Firefox 从 1.0.2 版本开始,Firefox 就已开始支持 XML 和 XSLT(包括 CSS). Mozilla Mo ...

  4. 在Linux下使用命令行打印文件

    近期需要将数学笔记打印出来复习,才发现Linux KDE环境下的默认PDF软件Okular根本无法将我在GoodNotes B5大小的页面写下的内容自适应地放大到A4纸上,只能以页面的原始尺寸打印.然 ...

  5. docker-compose进行部署容器的时候,报错权限不足

    刚刚用docker-compose部署elk的时候,没有起来,查看日志的时候,发现在数据卷挂载的时候,报错权限不足. 由于日志不在了,这里就直接贴出解决办法. 问题原因及解决办法 原因是CentOS7 ...

  6. (46)LINUX应用编程和网络编程之一Linux应用编程框架

    3.1.1.应用编程框架介绍 3.1.1.1.什么是应用编程 (1)整个嵌入式linux核心课程包括5个点,按照学习顺序依次是:裸机.C高级.uboot和系统移植.linux应用编程和网络编程.驱动. ...

  7. BZOJ 1022 Luogu P4279 [SHOI2008]小约翰的游戏 (博弈论)

    题目链接: (bzoj) https://www.lydsy.com/JudgeOnline/problem.php?id=1022 (luogu) https://www.luogu.org/pro ...

  8. Proxy-代理器(预计vue3.0实现双向绑定的方式)

    todo 常见的基于数据劫持的双向绑定有两种实现,一个是目前Vue在用的Object.defineProperty,另一个是ES2015中新增的Proxy,而Vue的作者宣称将在Vue3.0版本后加入 ...

  9. http中post 和 get 请求方法区别

    前言 做Web开发就一定会涉及到浏览器和服务器的交互,所以了解浏览器和服务器交互的方式就尤为重要.从接触B/S开始就已经接触到了get和post,但是对它们的了解确实不深入.在后来不断的做项目过程中, ...

  10. JSP 不能解析EL表达式的解决办法

    原文地址:http://www.jb51.net/article/30791.htm 原因是:在默认情况下,Servlet 2.4 / JSP 2.0支持 EL 表达式. 解决的办法有两种: 1.修改 ...