bzoj 4484: [Jsoi2015]最小表示
题意:
给一个有向无环图,求最多删多少条边,是这个图的连通性不变。
题解:
拓扑+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]最小表示相关推荐
- bzoj 3144(最小割)
传送门 最小割,主要考查建边的思路.本蒟蒻也是看了好几位大佬的博客才看懂.比如: 参考1 参考2 (x,y,z)连接(x,y,z+1)容量为f(x,y,z) (x,y,z)连接(x',y',z-d)容 ...
- P6134 [JSOI2015]最小表示(拓扑排序递推 + bitset优化,可达性统计变种)
整理的算法模板合集: ACM模板 P6134 [JSOI2015] 题目要求删除一条边整个图的连通性是不受影响的,也就是说如果我们要删除边(x,y)(x,y)(x,y),删除以后整个图的连通性不受影响 ...
- BZOJ 2561: 最小生成树(最小割)
U,V能在最小(大)生成树上,当且仅当权值比它小(大)的边无法连通U,V. 两次最小割就OK了. --------------------------------------------------- ...
- BZOJ 1185: [HNOI2007]最小矩形覆盖 [旋转卡壳]
1185: [HNOI2007]最小矩形覆盖 Time Limit: 10 Sec Memory Limit: 162 MBSec Special Judge Submit: 1435 Solv ...
- bzoj 4488: [Jsoi2015]最大公约数
4488: [Jsoi2015]最大公约数 Time Limit: 10 Sec Memory Limit: 256 MB Submit: 270 Solved: 154 [Submit][Sta ...
- BZOJ 2127 happiness (最小割)
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=2127 题解: 这道题就是传说中的"解方程"法.(貌似也有类似于BZ ...
- Bzoj 2127 happiness 最小割
happiness 题解: 将图转换成最小割. 将割完的图中与S相连的点看做选文科, 与T相连的点看做选理科. flow(s, u) = 文科值 flow(u,t) = 理科值 假设u 和 v 一起选 ...
- BZOJ 2400(网络流最小割)
思路: 首先比较显然能够想到二进制拆分 每一位的贡献是独立的 然后可以用最小割解决 S->i 表示这一个位置是0 inf i-T 表示为1 inf 然后所有的边保留 1 这样只要最后再找一遍t集 ...
- bzoj 4487: [Jsoi2015]染色问题
先贴一个题解吧,最近懒得要死2333,可能是太弱的原因吧,总是扒题解,(甚至连题解都看不懂了),blog也没更新,GG http://blog.csdn.net/werkeytom_ftd/artic ...
- bzoj4484[JSOI2015]最小表示
题意 给出一张DAG,要求删除尽量多的边使得连通性不变.(即:若删边前u到v有路径,则删边后仍有路径).点数30000,边数100000. 分析 如果从u到v有(u,v)这条边,且从u到v只有这一条路 ...
最新文章
- [CPyUG] Instagram被收购了一细看,python味很重的说。 - maolingzhi@gmail.com - Gmail
- 结对编程2——单元测试
- boost::test模块具有自定义初始化测试的共享库使用变体
- 通过自定义注解与aop统一存储操作记录
- Liunx 安装mysql 5.6.16
- JAXB和java.util.Map
- matlab基于dct的图像压缩编码解码_音频压缩编码的基本原理详解
- a==b和a.equals(b)的区别
- Qt工作笔记-QML中TextInput设置默认值,以及使用正则表达式只能输入整数
- Android + Appium 自动化测试完整的环境配置及代码详解
- oracle添加字段sql_如何用SQL语句添加和修改字段?
- 高通似乎成了台积电和三星在先进工艺上暗战主角
- 求二元一次方程 的解 C语言
- 飞秋2013正式版有偿修改在线等
- 关于linux的filp->private_data解释
- 产品创新案例分析|大疆如何从初创到无人机帝国的进阶之路
- 细说字体 Sans Serif 与 Serif
- python中concat的用法_pandas中concat()的用法
- 最实用的 Docker 知识(一)
- c语言上机试题8,7-8-C语言上机考试试题2.doc