bzoj4484[JSOI2015]最小表示

题意

给出一张DAG,要求删除尽量多的边使得连通性不变.(即:若删边前u到v有路径,则删边后仍有路径).点数30000,边数100000.

分析

如果从u到v有(u,v)这条边,且从u到v只有这一条路径,那么这条边必须保留.否则这条边一定可以删除.因为如果有不止一条路径从u到v,必然存在点x(x!=u,x!=v)使得u可到达x,x可到达v.而删边后必然也满足u可到达x,x可到达v,所以直接删掉(u,v)这条边就可以了.
刚才的分析已经给出了一个判定方法.既然如果有不止一条路径从u到v,必然存在点x(x!=u,x!=v)使得u可到达x,x可到达v,那么我们对每条边(u,v),枚举是否存在这样的x即可.这需要我们求出每个点能到达的点的集合,以及能到达这个点的集合.大力压位一波就好了.因为是DAG所以这个集合可以递推.复杂度O(nm/32).
其实这题是看内存猜算法系列,榜上清一色的120多兆,不是压位还能是啥
我是200多兆

#include<cstdio>
const int mod=1000000007;
const int maxn=30005,maxm=200005;
struct edge{int to,next;
}lst[maxm],lst2[maxm];int len=1,first[maxn],len2=1,first2[maxn];
void addedge(int a,int b){lst[len].to=b;lst[len].next=first[a];first[a]=len++;
}
void addedge2(int a,int b){lst2[len2].to=b;lst2[len2].next=first2[a];first2[a]=len2++;
}
int sz;
int reach[maxn][maxn/32+2],from[maxn][maxn/32+2];
int getbit(int u,int x){return (reach[u][x/32]>>(x&31))&1;
}
void revbit(int u,int x){reach[u][x/32]^=(1<<(x&31));
}
void revbit2(int u,int x){from[u][x/32]^=(1<<(x&31));
}
bool vis[maxn];
void dfs(int x){if(vis[x])return;vis[x]=true;for(int pt=first[x];pt;pt=lst[pt].next){dfs(lst[pt].to);for(int i=0;i<sz;++i)reach[x][i]|=reach[lst[pt].to][i];}revbit(x,x);
}
void dfs2(int x){if(vis[x])return;vis[x]=true;for(int pt=first2[x];pt;pt=lst2[pt].next){dfs2(lst2[pt].to);for(int i=0;i<sz;++i)from[x][i]|=from[lst2[pt].to][i];}revbit2(x,x);
}
int main(){int n,m;scanf("%d%d",&n,&m);sz=(n+31)/32+1;for(int i=1,a,b;i<=m;++i){scanf("%d%d",&a,&b);addedge(a,b);addedge2(b,a);}for(int i=1;i<=n;++i)if(!vis[i])dfs(i);for(int i=1;i<=n;++i)vis[i]=0;for(int i=1;i<=n;++i)if(!vis[i])dfs2(i);for(int i=1;i<=n;++i)revbit(i,i),revbit2(i,i);int ans=0;for(int i=1;i<=n;++i){for(int pt=first[i];pt;pt=lst[pt].next){int y=lst[pt].to;for(int j=0;j<sz;++j){if(from[y][j]&reach[i][j]){ans++;break;}}}}printf("%d\n",ans);return 0;
}

转载于:https://www.cnblogs.com/liu-runda/p/6921499.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/355481.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Enterprise Spring示例和集成测试

我的博客中的空白更长&#xff0c;因为我正在忙着写《 Pivotal认证的Spring企业集成专家考试–学习指南》 。 这本书是沉重的例子。 幸运的是&#xff0c;Apress同意开源所有这些示例。 因此&#xff0c; 在此GitHub存储库中有大量可用的Spring示例 。 总共146个带有集成测试的…

github删除文件_github 仓库中删除历史大文件

问题如果git中提交了大文件&#xff0c;而且保存到了版本库中&#xff0c;那在下载或者克隆git包的时候&#xff0c;速度会非常慢。再加上github在国内访问本来就很慢&#xff0c;可能会导致包无法下载(克隆)。为了提升下载(克隆)速度&#xff0c;可以永久的删除这些文件(包括该…

linux plc编程软件,基于Linux平台的可编程控制器软PLC设计

实例下面以一个简单的对3并口通道循环控制为例&#xff0c;说明软PLC 的工作流程。(1)梯形图编程。从软PLC 主界面进入后&#xff0c;启动梯形图编程&#xff0c;调用梯形图编程的主程序。梯形图编程共需要调用梯形图界面模块、关闭模块、IO 模块&#xff0c;这些均在配置文件中…

django的ModelForm

一、ModelForm 二、Ajax 原生 jQuery 伪Ajax操作 三、文件上传&#xff08;预览&#xff09; - Form提交&#xff08;会刷新页面&#xff09; - Ajax上传文件&#xff08;推荐&#xff09; 四、图片验证码&#xff08;跟session配合&#xff09; 五、CKEditor,UEEditor,TinyEdi…

insert into语句_入门MySQL——DML语句篇

前言&#xff1a;在上篇文章中&#xff0c;主要为大家介绍的是DDL语句的用法&#xff0c;可能细心的同学已经发现了。本篇文章将主要聚焦于DML语句&#xff0c;为大家讲解表数据相关操作。这里说明下DDL与DML语句的分类&#xff0c;可能有的同学还不太清楚。DDL(Data Definitio…

HBase shell 命令。

HBase shell 命令。 进入hbase shell console$HBASE_HOME/bin/hbase shell如果有kerberos认证&#xff0c;需要事先使用相应的keytab进行一下认证&#xff08;使用kinit命令&#xff09;&#xff0c;认证成功之后再使用hbase shell进入可以使用whoami命令可查看当前用户 hbase(…

python常用库有哪些餐厅_Python常用库整理

前两天有个同学问我关于Tkinter库的问题&#xff0c;但是我连Tkinter库是干啥的都不清楚&#xff0c;有点尴尬。Python库博大精深&#xff0c;涉及各个领域&#xff0c;多了解一些著名的库总比不知道的好。GUI图形界面TkinterwxPythonPyGTKPyQtPySideWeb框架Djangoweb2pyflaskb…

减少Java垃圾收集开销的5条提示

保持较低的GC开销的一些最有用的技巧是什么&#xff1f; 随着Java 9的一次再次延迟发布&#xff0c;G1&#xff08;“ Garbage First”&#xff09;垃圾收集器将设置为HotSpot JVM的默认收集器。 从串行垃圾收集器一直到CMS收集器&#xff0c;JVM在其整个生命周期中都见证了许…

关于collectionview布局的坑

不知道写了多少次collectionview&#xff0c;步了很多坑&#xff0c;现在看来虽然达到了自己想要的结果&#xff0c;却不知道其中所以然。还是总结一下&#xff0c;免得再走弯路&#xff1b; 场景是这样的&#xff0c;我要定制一个显示选择图片的排列&#xff0c;想要实现横向排…

python可以用来编写计算机网络程序吗_计算机网络(基于python做的笔记 )

计算机网络(UDP 和 TCP)概述为了让在不同的电脑上运行的软件&#xff0c;之间能够互相传递数据&#xff0c;就需要借助网络的功能使用网络能够把多方链接在一起&#xff0c;然后可以进行数据传递所谓的网络编程就是&#xff0c;让在不同的电脑上的软件能够进行数据传递&#xf…

git冲突Please move or remove them before you can merge

解决Git冲突造成的Please move or remove them before you can merge git clean -d -fx ""其中x -----删除忽略文件已经对git来说不识别的文件d -----删除未被添加到git的路径中的文件f -----强制运行 转载于:https://www.cnblogs.com/wicub/p/6934597.html

linux不重启换root密码是什么原因,在Linux下修改和重置root密码的方法(超简单)

刚开始接触linux的人&#xff0c;忘记了root密码可能会不知所措。想找回自己的root密码&#xff0c;但是又不知道方法。其实&#xff0c;只需要简单的几步就可以重置自己的root密码了(找回密码我也不会)1.开机HcQBEm上敲击e&#xff0c;然后编辑选项2.在linux16这一行&#xff…

python命令行参数作用_Python命令行参数解析模块argparse

前言更多内容&#xff0c;请访问我的 个人博客。以前 optparse 比较火&#xff0c;但是在python2.7版本后&#xff0c;官方不再维护这个模块&#xff0c;转而大力支持 argparse 。argparse 模块可以让人轻松编写用户友好的命令行接口。她可以从 sys.argv 中解析出参数&#xff…

SCP-bzoj-1019

项目编号&#xff1a;bzoj-1019 项目等级&#xff1a;Safe 项目描述&#xff1a; 戳这里 特殊收容措施&#xff1a; 对于一个hanoi&#xff0c;知道了各种移动操作的优先级&#xff0c;也就确定了方案。可以证明对于盘子数为N的hanoi&#xff0c;任意移动方案都等价于将数目为N…

shell编程入门 linux解释器原理,Shell编程入门Linux解释器原理详细介绍 使用Shell进行工作的人们对.doc...

Shell编程入门Linux解释器原理详细介绍 使用Shell进行工作的人们对Shell编程入门&#xff1a;Linux解释器原理详细介绍使用Shell进行工作的人们对Unix/Linux下的Shell编程都很熟悉&#xff0c;在所有的Shell编程的书中都会提到#!/bin/bash,而这里到底包含了些什么&#xff1f;对…

一键分享手机代码_通过广告路由器指定手机浏览器自动认证WIFI上网 附代码

说说应用过程&#xff0c;下面用手机QQ浏览器为例。在路由器搭建免费WIFI&#xff0c;用户连接免费WIFI后&#xff0c;使用手机QQ浏览器点击打开任意网页即可自动通过认证并上网&#xff0c;有的手机会自动打开认证网页&#xff0c;如果使用其他手机浏览器则自动跳转到引导认证…

netbeans7.4_NetBeans 7.1:创建自定义提示

netbeans7.4我已经在帖子中对我最喜欢的NetBeans提示进行了讨论&#xff0c;这些帖子中包含用于现代化Java代码的七个NetBeans提示和七个不可或缺的NetBeans Java提示 。 这两个帖子中涉及的十四个提示仅占NetBeans支持的“即开即用”提示总数的一小部分。 但是&#xff0c;由于…

linux uboot启动流程分析,uboot启动流程分析

uboot版本为NXP维护的2016.03版本下载地址为http://git.freescale.com/git/...分析uboot的启动流程&#xff0c;需要编译一下uboot&#xff0c;然后打开链接脚本u-boot.lds在u-boot.lds中1 OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf…

matlab求解线性方程组

模电题现在看来是不用matlab解方程不可做了orz 绝望&#xff0c;各种绝望&#xff0c;平时不努力到了期末季就焦虑得不行。 左除法就好 xA/b; 如果有符号变量&#xff0c;用syms声明一下就好。 越来越懒了orz好吧&#xff0c;解线性方程组这种毫无技术含量的东西用matlab倒是没…

魔术命令python_Python前10个魔术命令可以帮助您提高生产率

注意&#xff1a;Python不仅是最常用的编程语言&#xff0c;而且在集成新函数时也是最灵活的。例如&#xff0c;magic命令是Python shell的重要功能之一。让我们来看看10个简单的魔法命令来帮助工程师提高生产率。Python中的magic命令是什么&#xff1f;Magic命令是对常规Pytho…