4484: [Jsoi2015]最小表示

Time Limit: 20 Sec  Memory Limit: 512 MB
Submit: 120  Solved: 78
[Submit][Status][Discuss]

Description

【故事背景】
还记得去年JYY所研究的强连通分量的问题吗?去年的题目里,JYY研究了对于有向图的“加边”问题。对于图论有着强烈兴趣的JYY,今年又琢磨起了“删边”的问题。
【问题描述】
对于一个N个点(每个点从1到N编号),M条边的有向图,JYY发现,如果从图中删去一些边,那么原图的连通性会发生改变;而也有一些边,删去之后图的连通性并不会发生改变。
JYY想知道,如果想要使得原图任意两点的连通性保持不变,我们最多能删掉多少条边呢?
为了简化一下大家的工作量,这次JYY保证他给定的有向图一定是一个有向无环图(JYY:大家经过去年的问题,都知道对于给任意有向图的问题,最后都能转化为有向无环图上的问题,所以今年JYY就干脆简化一下大家的工作)。

Input

输入一行包含两个正整数N和M。
接下来M行,每行包含两个1到N之间的正整数x_i和y_i,表示图中存在一条从x_i到y_i的有向边。
输入数据保证,任意两点间只会有至多一条边存在。
N<=30,000,M<=100,000

Output

输出一行包含一个整数,表示JYY最多可以删掉的边数。

Sample Input

5 6
1 2
2 3
3 5
4 5
1 5
1 3

Sample Output

2

拓扑排序后,从拓扑序大的开始更新

枚举每一个出点,按拓扑序有小到大排序(拓扑序大的有可能被小的更新掉)

依次更新

#include<cmath>
#include<ctime>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<complex>
#include<iostream>
#include<algorithm>
#include<iomanip>
#include<vector>
#include<bitset>
#include<string>
#include<queue>
#include<set>
#include<map>
using namespace std;
inline int read()
{int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch<='9'&&ch>='0'){x=(x<<3)+(x<<1)+ch-'0';ch=getchar();}return x*f;
}
const int N=30010;
const int M=100100;
int m,n,ecnt,last[N],fa[N],ans[M],q[N],ind[N],topo[N];
struct EDGE{int fr,to,nt,clr;}e[M];
inline void add(int u,int v)
{e[++ecnt]=(EDGE){u,v,last[u]};last[u]=ecnt;}
struct node{int key,pos;}a[N];
bitset<N>b[N];
inline bool cmp(node x,node y)
{return x.key<y.key;}
int main()
{n=read();m=read();int u,v;for(int i=1;i<=m;i++){u=read();v=read();add(u,v);ind[v]++;}int head=1,tail=1;for(int i=1;i<=n;i++)if(!ind[i])q[tail++]=i;while(head<tail){u=q[head++];for(int i=last[u];i;i=e[i].nt){ind[e[i].to]--;if(!ind[e[i].to])q[tail++]=e[i].to;}}int ans=0;for(int j=tail-1;j>0;j--){u=q[j];int cnt=0;topo[u]=j;b[u][u]=1;for(int i=last[u];i;i=e[i].nt){a[++cnt]=(node){topo[e[i].to],e[i].to};}sort(a+1,a+1+cnt,cmp);for(int i=1;i<=cnt;i++){if(b[u][a[i].pos])ans++;b[u]|=b[a[i].pos];}}printf("%d\n",ans);return 0;
}
/*
5 6
1 2
2 3
3 5
4 5
1 5
1 32
*/

BZOJ 4484: [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. bzoj 4010: [HNOI2015]菜肴制作 拓扑排序

    4010: [HNOI2015]菜肴制作 Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/ ...

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

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

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

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

最新文章

  1. Fun Chat 饭聊手机软件
  2. 7、ShardingSphere 之 Sharding-Proxy
  3. 原理+实战掌握SQL注入方法
  4. Spring Boot 整合 Swagger
  5. springMVC注解中@RequestMapping中常用参数value params 以及@RequestParam 详解
  6. eclipse中birt插件使用_waves教学:如何使用通道条插件在DAW中创建模拟工作流
  7. 南邮 计算机网络,南邮计算机网络_期末复习纲要-精简版教材.pdf
  8. requestparam的作用_Spring MVC:请解释@RequestParam和@ModelAttribute之间的区别
  9. 保研生看过来!加入DUT Media Lab,科研没有不可能!
  10. java 加密工具包_加密工具类 - CryptoUtils.java
  11. ISO27017云服务信息安全管理体系认证
  12. Cloudera 公司研发工程师,Kudu 发明人Todd Lipcon:Kudu,Storage for Fast Analytics on fast Data
  13. 微软bing搜索好强大
  14. 一篇文章扫盲手机SIM卡相关知识
  15. linux的jq命令
  16. JavaScript设计模式都有哪些?
  17. Python-静态网页示例-豆瓣电影Top250
  18. CNC插补技术(从原理、分类到具体插补算法,较为详细)
  19. 疫情下的口罩生活,演绎出了哪些心理剧场?
  20. 读书是进步的源泉 | 实践是前进的基石

热门文章

  1. 制作自己的openwrt刷机包_openwrt刷机教程
  2. java中执行ddl语句,DDL(数据定义语言)
  3. notablilty笔记本模板_notability实测,让你上天的笔记软件
  4. 卡内基梅隆大学计算机专业介绍,美国卡内基梅隆大学计算机专业介绍
  5. 弹簧卸扣的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  6. vcard 文件数据格式
  7. 【转】金蝶EAS BOS工作流开发(附带JAVA脚本)
  8. 【C语言】深度剖析数据在内存中的存储
  9. pyspark写法总结
  10. 高性能计算机英语,“超级计算机”英语怎么说