【拓扑排序】【bitset】Gym - 101128A - Promotions
给你一张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的更多相关文章
- [LOJ 3101] [Luogu 5332] [JSOI2019]精准预测(2-SAT+拓扑排序+bitset)
[LOJ 3101] [Luogu 5332] [JSOI2019]精准预测(2-SAT+拓扑排序+bitset) 题面 题面较长,略 分析 首先,发现火星人只有死和活两种状态,考虑2-SAT 建图 ...
- NOIP 车站分级 (luogu 1983 & codevs 3294 & vijos 1851) - 拓扑排序 - bitset
描述 一条单向的铁路线上,依次有编号为 1, 2, ..., n 的 n 个火车站.每个火车站都有一个级别,最低为 1 级.现有若干趟车次在这条线路上行驶,每一趟都满足如下要求:如果这趟车次停靠了火车 ...
- [BZOJ4484][JSOI2015]最小表示[拓扑排序+bitset]
题意 给你一个 \(n\) 个点 \(m\) 条边的 \(\rm DAG\) ,询问最多能够删除多少条边,使得图的连通性不变 \(n\leq 3\times 10^4\ ,m\leq 10^5\) . ...
- BZOJ4484 JSOI2015最小表示(拓扑排序+bitset)
考虑在每个点的出边中删除哪些.如果其出边所指向的点中存在某点能到达另一点,那么显然指向被到达点的边是没有用的.于是拓扑排序逆序处理,按拓扑序枚举出边,bitset维护可达点集合即可. #include ...
- BZOJ 4484: [Jsoi2015]最小表示(拓扑排序+bitset)
传送门 解题思路 \(bitset\)维护连通性,给每个点开个\(bitset\),第\(i\)位为\(1\)则表示与第\(i\)位联通.算答案时显然要枚举每条边,而枚举边的顺序需要贪心,一个点先到达 ...
- CH 2101 - 可达性统计 - [BFS拓扑排序+bitset状压]
题目链接:传送门 描述 给定一张N个点M条边的有向无环图,分别统计从每个点出发能够到达的点的数量.N,M≤30000. 输入格式 第一行两个整数N,M,接下来M行每行两个整数x,y,表示从x到y的一条 ...
- 很好的脑洞题:dfs+暴力 Gym - 101128A Promotions
http://codeforces.com/gym/101128 题目大意:给你一个a,b,e,p.有e个点,p条有向边,每条边为(x,y),表示x->y,每次我们都取出一个入度为0的,并且一次 ...
- BZOJ5109 CodePlus 2017大吉大利,晚上吃鸡!(最短路+拓扑排序+bitset)
首先跑正反两遍dij求由起点/终点到某点的最短路条数,这样条件一就转化为f(S,A)*f(T,A)+f(S,B)*f(T,B)=f(S,T).同时建出最短路DAG,这样图中任何一条S到T的路径都是最短 ...
- [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连边即可. 但 ...
随机推荐
- POj 2104 K-th Number (分桶法+线段树)
题目链接 Description You are working for Macrohard company in data structures department. After failing ...
- springmvc4处理get和post请求中文乱码问题
1.在springmvc4处理get和post请求的问题 参看大牛博客连接:https://blog.csdn.net/qq_41665356/article/details/80234392
- 总有你要的编程书单(GitHub )
目录 IDE IntelliJ IDEA 简体中文专题教程 MySQL 21分钟MySQL入门教程 MySQL索引背后的数据结构及算法原理 NoSQL Disque 使用教程 Neo4j .rb 中文 ...
- css文本垂直水平居中
一.单行文本居中 .content{ height:100px; line-height:100px; text-align:center; border:1px solid red; } 效果图 二 ...
- Python自动化运维 - Django(二)Ajax基础 - 自定义分页
Ajax基础 AJAX 不是新的编程语言,而是一种使用现有标准的新方法. AJAX 是与服务器交换数据并更新部分网页的艺术,在不重新加载整个页面的情况下. 什么是Ajax AJAX = 异步 Java ...
- ThinkPHP3.1.3 整合 UEditor百度编辑器 图片上传
第一步.前端模板实例化百度编辑器 <js file='__ROOT__/Data/UEditor/ueditor.config.js' /> <js file='__ROOT__/D ...
- JS中类型检测方式
在js中的类型检测目前我所知道的是三种方式,分别有它们的应用场景: 1.typeof:主要用于检测基本类型. typeof undefined;//=> undefined typeof 'a' ...
- [ Python ] set集合及函数的使用
1. set类型 set 和 dict 类似,也是一组 key 的集合,但是不存储 value. 由于 key 不重复,所以,在 set 中, 没有重复的 key 集合是可变类型 (1)集合的创建 ...
- IE11中实现颜色渐变
background: -ms-linear-gradient(left,#daa23e,#ad7f27); 下面是css3中颜色渐变对各个浏览器的写法:background: -webkit-lin ...
- eclipse 配置jsp
1.安装jdk和jre 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html ...