【拓扑排序】【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;
}
转载于:https://www.cnblogs.com/autsky-jadek/p/7296638.html
【拓扑排序】【bitset】Gym - 101128A - Promotions相关推荐
- 164. 可达性统计【拓扑排序 / bitset】
无环说明一定有拓扑排序. 我们得到拓扑排序,倒着推.注意压位. #include<bits/stdc++.h> #include<bitset> using namespace ...
- 核弹剑仙 (拓扑排序+bitset或最短路)
题目链接:https://ac.nowcoder.com/acm/contest/6874/F 题意: 题解:参考了大佬的代码后,得出了两种做法,第一种是拓扑排序,建图时将强的点指向弱的点,同时用bi ...
- bzoj 3355: [Usaco2004 Jan]有序奶牛(拓扑排序+bitset)
3355: [Usaco2004 Jan]有序奶牛 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 56 Solved: 29 [Submit][S ...
- [BZOJ4484][JSOI2015]最小表示(拓扑排序+bitset)
有一个结论:对于边<u,v>,若这是u到v的唯一路径,则这条边显然不可被删去,否则必然可以被删去. 因为若u到v还有其它路径,则必然是从u到某个点x再到v,由于最终答案中连通性不变,也就是 ...
- bzoj2208 [Jsoi2010]连通数 强连通分量缩点+拓扑排序+bitset
Description 对于100%的数据,N不超过2000. Solution 容易想到要tarjan缩点按拓扑序递推,但是去重的步骤不好弄 C++STL中有bitset,用这个当成二进制按位状压即 ...
- P6134 [JSOI2015]最小表示(拓扑排序递推 + bitset优化,可达性统计变种)
整理的算法模板合集: ACM模板 P6134 [JSOI2015] 题目要求删除一条边整个图的连通性是不受影响的,也就是说如果我们要删除边(x,y)(x,y)(x,y),删除以后整个图的连通性不受影响 ...
- 2016百度之星 - 初赛(Astar Round2A)Gym Class(拓扑排序)
Gym Class Accepts: 849 Submissions: 4247 Time Limit: 6000/1000 MS (Java/Others) Memory Limit: 65 ...
- P6134-[JSOI2015]最小表示【bitset,拓扑排序】
正题 题目链接:https://www.luogu.com.cn/problem/P6134 题目大意 给出一张nnn个点mmm条边的DAGDAGDAG.求联通情况不变的情况下最多删除几条边. 1≤n ...
- Gym 101128A :Promotions (Southwestern Europe Regional Contest )
题意 一个公司里有E个员工P个上下级关系.这个公司有一种晋升制度.如果要晋升员工a,那么必须要先晋升a的所有领导.给出一个区间[A,B],如果要晋升A个员工,有哪些员工是一定会被晋升的?如果要晋升B个 ...
最新文章
- 技术直播:程序员副业的修炼指南!(限免报名)
- 修改sms_def的MOF文件收集网络共享信息
- 底板芯片组与内存映射(Motherboard Chipsets and the Memory Map) 【转】
- [转] javaweb学习-jstl-c:forEach中 varStatus的属性简介
- mysql查看执行计划_如何查看MySQL的执行计划
- 【Flutter】开发之功能篇(七)
- 学霸情侣一起投身国防事业,爱情和优秀同时发生了…
- 官宣!vue.ant.design 低调上线
- CSS 布局 - Overflow
- 快速查找文件的工具Everything
- 聊聊即将过去的2020,想想即将到来的2021
- 单片机原理及应用复习
- 《深入浅出数据分析》读书笔记
- 2022-2028年中国位置大数据行业市场专项调查及投资前景分析报告
- 计算机视觉教程2-6:八大图像特效算法制作你的专属滤镜(附Python代码)
- 为知笔记-艾宾浩斯遗忘曲线复习插件
- linux 限制单个ip流量,centos 的单ip流量控制-CentOS下利用iptables限速及限制每IP连接数...
- iphone传输 android,安卓苹果数据互传,三种方法教你怎样把iPhone数据迁移到安卓手机...
- 向5岁小朋友解释什么是微服务
- 前端 重定向和转发