给你一张DAG,若选择u点,则必须先选择所有能到达其的点。问你在选择A个点的情况下,哪些点必选;选择B个点的情况下,哪些点必选;选择B个点的情况下,哪些点一定不选。

选择A个点的情况,必选的点是那些其所能到达的点数>n-A的点。

选B个点,必选的点与前者类似。

一定不选的点,是能到达它的点数>B的点。

处理一个点所能到达的点数,要么暴力,也可以可以将边反向后,对每个点搞个bitset来做。

一个DAG反向后仍是DAG。

#include<cstdio>
#include<bitset>
#include<queue>
using namespace std;
bitset<5010>S[5010];
queue<int>q;
int first[5010],e,next[20010],v[20010],siz[5010],si2[5010];
void AddEdge(int U,int V){v[++e]=V;next[e]=first[U];first[U]=e;
}
int firs2[5010],e2,nex2[20010],v2[20010];
void AddEdg2(int U,int V){v2[++e2]=V;nex2[e2]=firs2[U];firs2[U]=e2;
}
int A,B,n,m,du[5010],du2[5010],ans1,ans2,ans3;
int main(){int x,y;
//  freopen("a.in","r",stdin);scanf("%d%d%d%d",&A,&B,&n,&m);for(int i=1;i<=m;++i){scanf("%d%d",&x,&y); ++x; ++y;AddEdge(x,y);AddEdg2(y,x);++du[y];++du2[x];}for(int i=1;i<=n;++i){S[i].set(i);if(!du2[i]){q.push(i);}}while(!q.empty()){int U=q.front();for(int i=firs2[U];i;i=nex2[i]){S[v2[i]]|=S[U];--du2[v2[i]];if(!du2[v2[i]]){q.push(v2[i]);}}q.pop();}for(int i=1;i<=n;++i){siz[i]=S[i].count();S[i].reset();S[i].set(i);if(!du[i]){q.push(i);}}while(!q.empty()){int U=q.front();for(int i=first[U];i;i=next[i]){S[v[i]]|=S[U];--du[v[i]];if(!du[v[i]]){q.push(v[i]);}}q.pop();}for(int i=1;i<=n;++i){si2[i]=S[i].count();}for(int i=1;i<=n;++i){if(siz[i]>n-A){++ans1;}}for(int i=1;i<=n;++i){if(siz[i]>n-B){++ans2;}}for(int i=1;i<=n;++i){if(si2[i]>B){++ans3;}}printf("%d\n%d\n%d\n",ans1,ans2,ans3);return 0;
}

转载于:https://www.cnblogs.com/autsky-jadek/p/7296638.html

【拓扑排序】【bitset】Gym - 101128A - Promotions相关推荐

  1. 164. 可达性统计【拓扑排序 / bitset】

    无环说明一定有拓扑排序. 我们得到拓扑排序,倒着推.注意压位. #include<bits/stdc++.h> #include<bitset> using namespace ...

  2. 核弹剑仙 (拓扑排序+bitset或最短路)

    题目链接:https://ac.nowcoder.com/acm/contest/6874/F 题意: 题解:参考了大佬的代码后,得出了两种做法,第一种是拓扑排序,建图时将强的点指向弱的点,同时用bi ...

  3. bzoj 3355: [Usaco2004 Jan]有序奶牛(拓扑排序+bitset)

    3355: [Usaco2004 Jan]有序奶牛 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 56  Solved: 29 [Submit][S ...

  4. [BZOJ4484][JSOI2015]最小表示(拓扑排序+bitset)

    有一个结论:对于边<u,v>,若这是u到v的唯一路径,则这条边显然不可被删去,否则必然可以被删去. 因为若u到v还有其它路径,则必然是从u到某个点x再到v,由于最终答案中连通性不变,也就是 ...

  5. bzoj2208 [Jsoi2010]连通数 强连通分量缩点+拓扑排序+bitset

    Description 对于100%的数据,N不超过2000. Solution 容易想到要tarjan缩点按拓扑序递推,但是去重的步骤不好弄 C++STL中有bitset,用这个当成二进制按位状压即 ...

  6. P6134 [JSOI2015]最小表示(拓扑排序递推 + bitset优化,可达性统计变种)

    整理的算法模板合集: ACM模板 P6134 [JSOI2015] 题目要求删除一条边整个图的连通性是不受影响的,也就是说如果我们要删除边(x,y)(x,y)(x,y),删除以后整个图的连通性不受影响 ...

  7. 2016百度之星 - 初赛(Astar Round2A)Gym Class(拓扑排序)

    Gym Class  Accepts: 849  Submissions: 4247  Time Limit: 6000/1000 MS (Java/Others)  Memory Limit: 65 ...

  8. P6134-[JSOI2015]最小表示【bitset,拓扑排序】

    正题 题目链接:https://www.luogu.com.cn/problem/P6134 题目大意 给出一张nnn个点mmm条边的DAGDAGDAG.求联通情况不变的情况下最多删除几条边. 1≤n ...

  9. Gym 101128A :Promotions (Southwestern Europe Regional Contest )

    题意 一个公司里有E个员工P个上下级关系.这个公司有一种晋升制度.如果要晋升员工a,那么必须要先晋升a的所有领导.给出一个区间[A,B],如果要晋升A个员工,有哪些员工是一定会被晋升的?如果要晋升B个 ...

最新文章

  1. 技术直播:程序员副业的修炼指南!(限免报名)
  2. 修改sms_def的MOF文件收集网络共享信息
  3. 底板芯片组与内存映射(Motherboard Chipsets and the Memory Map) 【转】
  4. [转] javaweb学习-jstl-c:forEach中 varStatus的属性简介
  5. mysql查看执行计划_如何查看MySQL的执行计划
  6. 【Flutter】开发之功能篇(七)
  7. 学霸情侣一起投身国防事业,爱情和优秀同时发生了…
  8. 官宣!vue.ant.design 低调上线
  9. CSS 布局 - Overflow
  10. 快速查找文件的工具Everything
  11. 聊聊即将过去的2020,想想即将到来的2021
  12. 单片机原理及应用复习
  13. 《深入浅出数据分析》读书笔记
  14. 2022-2028年中国位置大数据行业市场专项调查及投资前景分析报告
  15. 计算机视觉教程2-6:八大图像特效算法制作你的专属滤镜(附Python代码)
  16. 为知笔记-艾宾浩斯遗忘曲线复习插件
  17. linux 限制单个ip流量,centos 的单ip流量控制-CentOS下利用iptables限速及限制每IP连接数...
  18. iphone传输 android,安卓苹果数据互传,三种方法教你怎样把iPhone数据迁移到安卓手机...
  19. 向5岁小朋友解释什么是微服务
  20. 前端 重定向和转发

热门文章

  1. 专访|黄铁军:人工智能不会以人为中心,但不要为此失落
  2. 不懂装饰器,就不是真正会 Python
  3. 人工智能基础-向量的基本几何意义
  4. 关于无人驾驶商业化现状的一个小研究
  5. 项目经理生存现状(漫画)
  6. 深度丨深度强化学习研究的短期悲观与长期乐观(长文)
  7. 心得丨一文告诉你想学数据分析该读什么书、从哪本读起
  8. 01_字符串处理------01_切分
  9. Python 之 matplotlib (六)tick能见度
  10. Error(s) in loading state_dict