给你一张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;
}

【拓扑排序】【bitset】Gym - 101128A - Promotions的更多相关文章

  1. [LOJ 3101] [Luogu 5332] [JSOI2019]精准预测(2-SAT+拓扑排序+bitset)

    [LOJ 3101] [Luogu 5332] [JSOI2019]精准预测(2-SAT+拓扑排序+bitset) 题面 题面较长,略 分析 首先,发现火星人只有死和活两种状态,考虑2-SAT 建图 ...

  2. NOIP 车站分级 (luogu 1983 & codevs 3294 & vijos 1851) - 拓扑排序 - bitset

    描述 一条单向的铁路线上,依次有编号为 1, 2, ..., n 的 n 个火车站.每个火车站都有一个级别,最低为 1 级.现有若干趟车次在这条线路上行驶,每一趟都满足如下要求:如果这趟车次停靠了火车 ...

  3. [BZOJ4484][JSOI2015]最小表示[拓扑排序+bitset]

    题意 给你一个 \(n\) 个点 \(m\) 条边的 \(\rm DAG\) ,询问最多能够删除多少条边,使得图的连通性不变 \(n\leq 3\times 10^4\ ,m\leq 10^5\) . ...

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

    考虑在每个点的出边中删除哪些.如果其出边所指向的点中存在某点能到达另一点,那么显然指向被到达点的边是没有用的.于是拓扑排序逆序处理,按拓扑序枚举出边,bitset维护可达点集合即可. #include ...

  5. BZOJ 4484: [Jsoi2015]最小表示(拓扑排序+bitset)

    传送门 解题思路 \(bitset\)维护连通性,给每个点开个\(bitset\),第\(i\)位为\(1\)则表示与第\(i\)位联通.算答案时显然要枚举每条边,而枚举边的顺序需要贪心,一个点先到达 ...

  6. CH 2101 - 可达性统计 - [BFS拓扑排序+bitset状压]

    题目链接:传送门 描述 给定一张N个点M条边的有向无环图,分别统计从每个点出发能够到达的点的数量.N,M≤30000. 输入格式 第一行两个整数N,M,接下来M行每行两个整数x,y,表示从x到y的一条 ...

  7. 很好的脑洞题:dfs+暴力 Gym - 101128A Promotions

    http://codeforces.com/gym/101128 题目大意:给你一个a,b,e,p.有e个点,p条有向边,每条边为(x,y),表示x->y,每次我们都取出一个入度为0的,并且一次 ...

  8. BZOJ5109 CodePlus 2017大吉大利,晚上吃鸡!(最短路+拓扑排序+bitset)

    首先跑正反两遍dij求由起点/终点到某点的最短路条数,这样条件一就转化为f(S,A)*f(T,A)+f(S,B)*f(T,B)=f(S,T).同时建出最短路DAG,这样图中任何一条S到T的路径都是最短 ...

  9. [JSOI2019]精准预测(2-SAT+拓扑排序+bitset)

    设第i个人在t时刻生/死为(x,0/1,t),然后显然能够连上(x,0,t)->(x,0,t-1),(x,1,t)->(x,1,t+1),然后对于每个限制,用朴素的2-SAT连边即可. 但 ...

随机推荐

  1. JavaWeb使用Session防止表单重复提交

    在平时开发中,如果网速比较慢的情况下,用户提交表单后,发现服务器半天都没有响应,那么用户可能会以为是自己没有提交表单,就会再点击提交按钮重复提交表单,我们在开发中必须防止表单重复提交. 1.什么是表单 ...

  2. python 异步IO( asyncio) 协程

    python asyncio 网络模型有很多中,为了实现高并发也有很多方案,多线程,多进程.无论多线程和多进程,IO的调度更多取决于系统,而协程的方式,调度来自用户,用户可以在函数中yield一个状态 ...

  3. python实战===用python识别图片中的中文

    需要安装的模块 PIL pytesseract 需要下载的工具: http://download.csdn.net/download/bo_mask/10196285 因为之前百度云的链接总失效,所以 ...

  4. U-Boot启动过程完全分析<转>

    转载自:http://www.cnblogs.com/heaad/archive/2010/07/17/1779829.html 1.1       U-Boot工作过程 U-Boot启动内核的过程可 ...

  5. python爬虫模块之HTML解析模块

    这个就比较简单了没有什么好强调的,如果返回的json 就是直接按照键值取,如果是网页就是用lxml模块的html进行xpath解析. from lxml import html import json ...

  6. pandas+sqlalchemy 保存数据到mysql

    import pandas as pd from sqlalchemy import create_engine data3={"lsit1":[1,2],"lsit2& ...

  7. Unsupported gpu architecture 'compute_20'

    NVCC src/caffe/layers/reduction_layer.cunvcc fatal   : Unsupported gpu architecture 'compute_20'Make ...

  8. iframe自适应高度的方法

    不带边框的iframe因为能和网页无缝的结合从而不刷新新页面的情况下实现更新页面部分的数据成为可能,可是iframe却不像层那样可以收缩自如,iframe高度需要动态的调整需要JS来配合使用,只能通过 ...

  9. jequry_rotate.js用来写旋转类的东西的插件(如:抽奖转盘)

    网上发现一个很有意思的jQuery旋转插件,支持Internet Explorer 6.0+ .Firefox 2.0 .Safari 3 .Opera 9 .Google Chrome,高级浏览器下 ...

  10. linux命令(39):ss命令

    ss是Socket Statistics的缩写.顾名思义,ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容.但ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信 ...