考虑在每个点的出边中删除哪些。如果其出边所指向的点中存在某点能到达另一点,那么显然指向被到达点的边是没有用的。于是拓扑排序逆序处理,按拓扑序枚举出边,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)相关推荐

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

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

  2. 拓扑排序----Kahn算法和字典序最小的拓扑排序

    一.拓扑排序定义: 二.卡恩算法(Kahn): 1.Kahn算法介绍: 有向无环图DAG至少具有一个度数为0的顶点和一个度数为0的顶点. 证明:上述事实有一个简单的证明,即DAG不包含循环,这意味着所 ...

  3. 中石油训练赛 - Swapping Places(字典序最小的拓扑排序)

    题目链接:点击查看 题目大意:给出 s 个字符串表示种类,再给出 m 个朋友关系,表示两个种类的动物是朋友,现在给出一个长度为 n 的种类排列,规定相邻两个是朋友的种类的动物可以交换位置,问如何操作, ...

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

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

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

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

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

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

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

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

  8. bzoj4484[JSOI2015]最小表示

    题意 给出一张DAG,要求删除尽量多的边使得连通性不变.(即:若删边前u到v有路径,则删边后仍有路径).点数30000,边数100000. 分析 如果从u到v有(u,v)这条边,且从u到v只有这一条路 ...

  9. 拓扑排序:利用kahn算法。c++

    拓扑排序 拓扑排序要解决的问题是给一个图的所有节点排序.在一个有向无环图DAG中,我们将图中的顶点以线性的方式进行排序,对于有向边(u,v),确保u在v的前面,认为v依赖于u; 如果u到v有路径,u可 ...

  10. 图论 —— AOV 网与拓扑排序

    [AOV网] 日常生活中,一项大的工程可以看作是由若干个子工程组成的集合,这些子工程之间必定存在一定的先后顺序,即某些子工程必须在其他的一些子工程完成后才能开始. 我们用有向图来表现子工程之间的先后关 ...

最新文章

  1. 基于Golang的监听读取配置文件的程序包开发——simpleConfig_v1
  2. Shiny平台构建与R包开发(五)——ui美化
  3. WEB开发者八项注意
  4. mysql 5.5 type=innodb_mysql5.5.23TYPE=InnoDB语法错误_MySQL
  5. pytorch无法将模型加载到gpu上
  6. 两个女孩的生日最后演变成了鬼节
  7. 世粮署:马斯克、贝索斯等富豪应捐出部分资产缓解全球饥饿
  8. 二叉树最小单元结点的实现
  9. Linux下通过 rm -f 删除大量文件时报错:Argument list too long
  10. [Python] L1-001. Hello World-PAT团体程序设计天梯赛GPLT
  11. 8255工作方式2——双向选通输入输出(A口)
  12. BURP安装Turbo Intruder插件报错问题
  13. 计算机网络的地址三类,计算机网络中有几种地址格式
  14. CONTINUOUS CONTROL WITH DEEP REINFORCEMENT LEARNING
  15. 生活中有哪些坏习惯一旦改正就能带来立竿见影的好处?
  16. 网络安全系列之三十七 Pangolin(穿山甲)和Havij(胡萝卜)的使用
  17. 【java】 文件批量下载并压缩为zip压缩包
  18. 图像算法原理与实践——图像修复之 全变分模型
  19. 如何最快恢复逻辑备份
  20. safari 浏览器输入框不能输入

热门文章

  1. mysql中ddl和ddm_DDL与DML问题
  2. oracle px execute reply,(转)PX Deq: Execute Reply 案例说明
  3. js 调用 百度/腾讯/高德地图app 导航 初始位置为我的位置
  4. linux 重命名文件夹
  5. CTF-代码审计(2)
  6. QQ群霸屏技术教程:不论霸屏技术,只谈QQ认证群
  7. 文章阅读 - 机器学习检测DNS隧道
  8. 局域网对战平台 linux,在Linux下可用Wine安装和运行腾讯对战平台、5E对战平台
  9. 新版Uniapp开发多端影视APP源码+对接苹果CMS
  10. 根据pc值确定出错的代码位置