题意:

给一个有向无环图,求最多删多少条边,是这个图的连通性不变。

题解:

拓扑+bitset
我图论好弱啊。
看到这题,表示一脸蒙逼,xjb猜结论猜不出,开始%
按照拓扑序后只有前面的点向后面的点连边,所以可以反过枚举点,在枚举这个点连出去的边,假如已经连通了,那就显然是废边。
还要维护一个东西,就是每个点到拓扑序最大的那些点的最长距离,显然,距离长的路径更有希望与更多的点连通,所以要先访问路径长的。
用个bitset维护连通性就好了。
code:

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<bitset>
#include<queue>
#include<algorithm>
using namespace std;
bitset<30005> bi[30005];
struct node{int x,y,next;
}a[100010];int len=0,last[30005];
int arr[30005],dis[30005];
int n,m,d[30005],ans=0;
void ins(int x,int y)
{a[++len].x=x;a[len].y=y;a[len].next=last[x];last[x]=len;
}
int q[30005];
bool cmp(int a,int b){return dis[a]>dis[b];}
void solve()
{int ed=0,st=1;for(int i=1;i<=n;i++) if(d[i]==0) q[++ed]=i;while(st<=ed){int x=q[st];for(int i=last[x];i;i=a[i].next){int y=a[i].y;d[y]--;if(d[y]==0) q[++ed]=y;}st++;}for(int i=ed;i>=1;i--){int x=q[i];bi[x][x]=1;int num=0;dis[x]=0;for(int i=last[x];i;i=a[i].next){int y=a[i].y;arr[++num]=y;dis[x]=max(dis[x],dis[y]+1);}sort(arr+1,arr+num+1,cmp);for(int j=1;j<=num;j++){int y=arr[j];if(bi[x][y]) ans++;bi[x]|=bi[y];}}
}
int main()
{scanf("%d %d",&n,&m);for(int i=1;i<=m;i++){int x,y;scanf("%d %d",&x,&y);ins(x,y);d[y]++;}solve();printf("%d",ans);
}

bzoj 4484: [Jsoi2015]最小表示相关推荐

  1. bzoj 3144(最小割)

    传送门 最小割,主要考查建边的思路.本蒟蒻也是看了好几位大佬的博客才看懂.比如: 参考1 参考2 (x,y,z)连接(x,y,z+1)容量为f(x,y,z) (x,y,z)连接(x',y',z-d)容 ...

  2. P6134 [JSOI2015]最小表示(拓扑排序递推 + bitset优化,可达性统计变种)

    整理的算法模板合集: ACM模板 P6134 [JSOI2015] 题目要求删除一条边整个图的连通性是不受影响的,也就是说如果我们要删除边(x,y)(x,y)(x,y),删除以后整个图的连通性不受影响 ...

  3. BZOJ 2561: 最小生成树(最小割)

    U,V能在最小(大)生成树上,当且仅当权值比它小(大)的边无法连通U,V. 两次最小割就OK了. --------------------------------------------------- ...

  4. BZOJ 1185: [HNOI2007]最小矩形覆盖 [旋转卡壳]

    1185: [HNOI2007]最小矩形覆盖 Time Limit: 10 Sec  Memory Limit: 162 MBSec  Special Judge Submit: 1435  Solv ...

  5. bzoj 4488: [Jsoi2015]最大公约数

    4488: [Jsoi2015]最大公约数 Time Limit: 10 Sec  Memory Limit: 256 MB Submit: 270  Solved: 154 [Submit][Sta ...

  6. BZOJ 2127 happiness (最小割)

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=2127 题解: 这道题就是传说中的"解方程"法.(貌似也有类似于BZ ...

  7. Bzoj 2127 happiness 最小割

    happiness 题解: 将图转换成最小割. 将割完的图中与S相连的点看做选文科, 与T相连的点看做选理科. flow(s, u) = 文科值 flow(u,t) = 理科值 假设u 和 v 一起选 ...

  8. BZOJ 2400(网络流最小割)

    思路: 首先比较显然能够想到二进制拆分 每一位的贡献是独立的 然后可以用最小割解决 S->i 表示这一个位置是0 inf i-T 表示为1 inf 然后所有的边保留 1 这样只要最后再找一遍t集 ...

  9. bzoj 4487: [Jsoi2015]染色问题

    先贴一个题解吧,最近懒得要死2333,可能是太弱的原因吧,总是扒题解,(甚至连题解都看不懂了),blog也没更新,GG http://blog.csdn.net/werkeytom_ftd/artic ...

  10. bzoj4484[JSOI2015]最小表示

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

最新文章

  1. [CPyUG] Instagram被收购了一细看,python味很重的说。 - maolingzhi@gmail.com - Gmail
  2. 结对编程2——单元测试
  3. boost::test模块具有自定义初始化测试的共享库使用变体
  4. 通过自定义注解与aop统一存储操作记录
  5. Liunx 安装mysql 5.6.16
  6. JAXB和java.util.Map
  7. matlab基于dct的图像压缩编码解码_音频压缩编码的基本原理详解
  8. a==b和a.equals(b)的区别
  9. Qt工作笔记-QML中TextInput设置默认值,以及使用正则表达式只能输入整数
  10. Android + Appium 自动化测试完整的环境配置及代码详解
  11. oracle添加字段sql_如何用SQL语句添加和修改字段?
  12. 高通似乎成了台积电和三星在先进工艺上暗战主角
  13. 求二元一次方程 的解 C语言
  14. 飞秋2013正式版有偿修改在线等
  15. 关于linux的filp->private_data解释
  16. 产品创新案例分析|大疆如何从初创到无人机帝国的进阶之路
  17. 细说字体 Sans Serif 与 Serif
  18. python中concat的用法_pandas中concat()的用法
  19. 最实用的 Docker 知识(一)
  20. c语言上机试题8,7-8-C语言上机考试试题2.doc

热门文章

  1. AI-Tesseract4.0-OCR训练相关
  2. 算法基础知识——贪心策略
  3. 大规模服务设计部署经验
  4. 计算机支架式教学案例,万紫千红总是春--支架式教学(网友来稿)
  5. Java Web安全之代码审计
  6. ps学习之立体字设计
  7. A Pose Proposal and Refinement Network for Better 6D Object Pose Estimation
  8. OpenGL学习例程精析(3d纹理)
  9. redis cluster master failover问题
  10. iqooz6和z5哪个好 iqoo z6和iqoo z5哪个更值得入手