BZOJ4484 JSOI2015最小表示(拓扑排序+bitset)
考虑在每个点的出边中删除哪些。如果其出边所指向的点中存在某点能到达另一点,那么显然指向被到达点的边是没有用的。于是拓扑排序逆序处理,按拓扑序枚举出边,bitset维护可达点集合即可。
#include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<algorithm> #include<bitset> using namespace std; int read() {int x=0,f=1;char c=getchar();while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();return x*f; } #define N 30010 #define M 100010 int n,m,p[N],id[N],degree[N],q[N],v[N],t,ans; bitset<N> a[N],b; struct data{int to,nxt; }edge[M]; void addedge(int x,int y){t++;edge[t].to=y,edge[t].nxt=p[x],p[x]=t;} void topsort() {int head=0,tail=0;for (int i=1;i<=n;i++) if (!degree[i]) q[++tail]=i,id[i]=tail;while (tail<n){int x=q[++head];for (int i=p[x];i;i=edge[i].nxt){degree[edge[i].to]--;if (!degree[edge[i].to]) q[++tail]=edge[i].to,id[edge[i].to]=tail;}} } bool cmp(const int&a,const int&b) {return id[a]<id[b]; } int main() { #ifndef ONLINE_JUDGEfreopen("bzoj4484.in","r",stdin);freopen("bzoj4484.out","w",stdout);const char LL[]="%I64d\n"; #elseconst char LL[]="%lld\n"; #endifn=read(),m=read();for (int i=1;i<=m;i++){int x=read(),y=read();addedge(x,y);degree[y]++;}topsort();for (int i=n;i>=1;i--){int x=q[i],t=0;a[x][x]=1;for (int j=p[x];j;j=edge[j].nxt)v[++t]=edge[j].to;sort(v+1,v+t+1,cmp);for (int j=1;j<=t;j++)if (a[x][v[j]]) ans++;else a[x]|=a[v[j]];}cout<<ans;return 0; }
转载于:https://www.cnblogs.com/Gloid/p/9881828.html
BZOJ4484 JSOI2015最小表示(拓扑排序+bitset)相关推荐
- [BZOJ4484][JSOI2015]最小表示(拓扑排序+bitset)
有一个结论:对于边<u,v>,若这是u到v的唯一路径,则这条边显然不可被删去,否则必然可以被删去. 因为若u到v还有其它路径,则必然是从u到某个点x再到v,由于最终答案中连通性不变,也就是 ...
- 拓扑排序----Kahn算法和字典序最小的拓扑排序
一.拓扑排序定义: 二.卡恩算法(Kahn): 1.Kahn算法介绍: 有向无环图DAG至少具有一个度数为0的顶点和一个度数为0的顶点. 证明:上述事实有一个简单的证明,即DAG不包含循环,这意味着所 ...
- 中石油训练赛 - Swapping Places(字典序最小的拓扑排序)
题目链接:点击查看 题目大意:给出 s 个字符串表示种类,再给出 m 个朋友关系,表示两个种类的动物是朋友,现在给出一个长度为 n 的种类排列,规定相邻两个是朋友的种类的动物可以交换位置,问如何操作, ...
- 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 ...
- bzoj2208 [Jsoi2010]连通数 强连通分量缩点+拓扑排序+bitset
Description 对于100%的数据,N不超过2000. Solution 容易想到要tarjan缩点按拓扑序递推,但是去重的步骤不好弄 C++STL中有bitset,用这个当成二进制按位状压即 ...
- bzoj4484[JSOI2015]最小表示
题意 给出一张DAG,要求删除尽量多的边使得连通性不变.(即:若删边前u到v有路径,则删边后仍有路径).点数30000,边数100000. 分析 如果从u到v有(u,v)这条边,且从u到v只有这一条路 ...
- 拓扑排序:利用kahn算法。c++
拓扑排序 拓扑排序要解决的问题是给一个图的所有节点排序.在一个有向无环图DAG中,我们将图中的顶点以线性的方式进行排序,对于有向边(u,v),确保u在v的前面,认为v依赖于u; 如果u到v有路径,u可 ...
- 图论 —— AOV 网与拓扑排序
[AOV网] 日常生活中,一项大的工程可以看作是由若干个子工程组成的集合,这些子工程之间必定存在一定的先后顺序,即某些子工程必须在其他的一些子工程完成后才能开始. 我们用有向图来表现子工程之间的先后关 ...
最新文章
- 基于Golang的监听读取配置文件的程序包开发——simpleConfig_v1
- Shiny平台构建与R包开发(五)——ui美化
- WEB开发者八项注意
- mysql 5.5 type=innodb_mysql5.5.23TYPE=InnoDB语法错误_MySQL
- pytorch无法将模型加载到gpu上
- 两个女孩的生日最后演变成了鬼节
- 世粮署:马斯克、贝索斯等富豪应捐出部分资产缓解全球饥饿
- 二叉树最小单元结点的实现
- Linux下通过 rm -f 删除大量文件时报错:Argument list too long
- [Python] L1-001. Hello World-PAT团体程序设计天梯赛GPLT
- 8255工作方式2——双向选通输入输出(A口)
- BURP安装Turbo Intruder插件报错问题
- 计算机网络的地址三类,计算机网络中有几种地址格式
- CONTINUOUS CONTROL WITH DEEP REINFORCEMENT LEARNING
- 生活中有哪些坏习惯一旦改正就能带来立竿见影的好处?
- 网络安全系列之三十七 Pangolin(穿山甲)和Havij(胡萝卜)的使用
- 【java】 文件批量下载并压缩为zip压缩包
- 图像算法原理与实践——图像修复之 全变分模型
- 如何最快恢复逻辑备份
- safari 浏览器输入框不能输入
热门文章
- mysql中ddl和ddm_DDL与DML问题
- oracle px execute reply,(转)PX Deq: Execute Reply 案例说明
- js 调用 百度/腾讯/高德地图app 导航 初始位置为我的位置
- linux 重命名文件夹
- CTF-代码审计(2)
- QQ群霸屏技术教程:不论霸屏技术,只谈QQ认证群
- 文章阅读 - 机器学习检测DNS隧道
- 局域网对战平台 linux,在Linux下可用Wine安装和运行腾讯对战平台、5E对战平台
- 新版Uniapp开发多端影视APP源码+对接苹果CMS
- 根据pc值确定出错的代码位置