[JSOI2015]最小表示
题目大意:
尽可能多地去掉一个有向无环图上的边,使得图的连通性不变。
思路:
拓扑排序,然后倒序求出每个结点到出度为$0$的点的距离$d$,再倒序遍历每一个点$x$,以$d$为关键字对其出边降序排序,尝试加入每一条边,若加边之前两点已经连通,则说明这条边可以删去。可以用bitset维护图的连通性,注意原图是有向图,因此不能用并查集维护。
#include<queue>
#include<cstdio>
#include<cctype>
#include<vector>
#include<bitset>
#include<algorithm>
#include<functional>
inline int getint() {
char ch;
while(!isdigit(ch=getchar()));
int x=ch^'';
while(isdigit(ch=getchar())) x=(((x<<)+x)<<)+(ch^'');
return x;
}
const int V=;
std::vector<int> e[V];
inline void add_edge(const int u,const int v) {
e[u].push_back(v);
}
int n;
int in[V]={},top[V]={};
inline void Kahn() {
std::queue<int> q;
for(int i=;i<=n;i++) {
if(!in[i]) q.push(i);
}
int cnt=;
while(!q.empty()) {
int x=q.front();
q.pop();
top[x]=++cnt;
for(unsigned i=;i<e[x].size();i++) {
int &y=e[x][i];
if(!--in[y]) {
q.push(y);
}
}
}
}
struct Vertex {
int top,id;
bool operator > (const Vertex &another) const {
return top>another.top;
}
};
Vertex v[V];
int dis[V]={};
int ans=;
inline bool cmp(const int x,const int y) {
return dis[x]>dis[y];
}
inline void DP() {
for(int i=;i<n;i++) {
v[i]=(Vertex){top[i+],i+};
}
std::sort(&v[],&v[n],std::greater<Vertex>());
for(int i=;i<n;i++) {
int &x=v[i].id;
for(unsigned j=;j<e[x].size();j++) {
int &y=e[x][j];
dis[x]=std::max(dis[x],dis[y]+);
}
}
}
std::bitset<V> bit[V];
inline void cut() {
for(int i=;i<n;i++) {
int &x=v[i].id;
bit[x].set(x);
std::sort(e[x].begin(),e[x].end(),cmp);
for(unsigned j=;j<e[x].size();j++) {
int &y=e[x][j];
if(bit[x][y]) ans++;
bit[x]|=bit[y];
}
}
}
int main() {
n=getint();
for(int m=getint();m;m--) {
int u=getint(),v=getint();
add_edge(u,v);
in[v]++;
}
Kahn();
DP();
cut();
printf("%d\n",ans);
return ;
}
[JSOI2015]最小表示的更多相关文章
- 4484: [Jsoi2015]最小表示(拓扑序+bitset维护连通性)
4484: [Jsoi2015]最小表示 题目链接 题解: bitset的题感觉都好巧妙啊QAQ. 因为题目中给出的是一个DAG,如果\(u->v\)这条边可以删去,等价于还存在一个更长的路径可 ...
- BZOJ4484: [Jsoi2015]最小表示(拓扑排序乱搞+bitset)
Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 348 Solved: 172[Submit][Status][Discuss] Descriptio ...
- bzoj 4484 [Jsoi2015]最小表示——bitset
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4484 每个点上存一下它到每个点的连通性.用 bitset 的话空间就是 \( \frac{n ...
- [BZOJ4484][JSOI2015]最小表示[拓扑排序+bitset]
题意 给你一个 \(n\) 个点 \(m\) 条边的 \(\rm DAG\) ,询问最多能够删除多少条边,使得图的连通性不变 \(n\leq 3\times 10^4\ ,m\leq 10^5\) . ...
- bzoj4484[JSOI2015]最小表示
题意 给出一张DAG,要求删除尽量多的边使得连通性不变.(即:若删边前u到v有路径,则删边后仍有路径).点数30000,边数100000. 分析 如果从u到v有(u,v)这条边,且从u到v只有这一条路 ...
- BZOJ4484 JSOI2015最小表示(拓扑排序+bitset)
考虑在每个点的出边中删除哪些.如果其出边所指向的点中存在某点能到达另一点,那么显然指向被到达点的边是没有用的.于是拓扑排序逆序处理,按拓扑序枚举出边,bitset维护可达点集合即可. #include ...
- BZOJ 4484: [Jsoi2015]最小表示(拓扑排序+bitset)
传送门 解题思路 \(bitset\)维护连通性,给每个点开个\(bitset\),第\(i\)位为\(1\)则表示与第\(i\)位联通.算答案时显然要枚举每条边,而枚举边的顺序需要贪心,一个点先到达 ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- 「JSOI2015」最小表示
「JSOI2015」最小表示 传送门 很显然的一个结论:一条边 \(u \to v\) 能够被删去,当且仅当至少存在一条其它的路径从 \(u\) 通向 \(v\) . 所以我们就建出正反两张图,对每个 ...
随机推荐
- python---补充locals()变量在变量分发中的使用
在Django,tornado等框架中,变量分发渲染模板是一件再平常不过的事,但是当变量过多时,如何快速的进行变量传递 此时就可以用到locals()获取本地变量,将变量变为字典传入 def intr ...
- 8 Productivity hacks for Data Scientists & Business Analysts
8 Productivity hacks for Data Scientists & Business Analysts Introduction I was catching up with ...
- [转载] PNG优化插件:TinyPNG for Photoshop CC
http://www.im286.com/thread-14922316-1-1.html http://www.tinypng.com的PS插件版,优化.无损压缩PNG,支持批量处理,据说只支持Ph ...
- Jad查看源码
需要者两个文件:下载地址:http://pan.baidu.com/s/11qq4I 1,解压jar包 有两个文件 分别是net.sf.jadclipse_3.3.0 jad.exe 文件 2,找到m ...
- Loadrunner如何进行有效的IP欺骗
柠檬班的清风同学某天紧急求助如何搞IP欺骗,端午节后,抽时间把这个事情搞定啦!跟大家详细的讲讲IP欺骗的运用和理解. 一.什么是IP欺骗 给你客户端的IP地址加个马甲,让服务器端识别不到是同一个IP地 ...
- Python学习笔记之逻辑回归
# -*- coding: utf-8 -*- """ Created on Wed Apr 22 17:39:19 2015 @author: 90Zeng " ...
- Linux监控重要进程的实现方法
Linux监控重要进程的实现方法 不管后台服务程序写的多么健壮,还是可能会出现core dump等程序异常退出的情况,但是一般情况下需要在无 人为干预情况下,能够自动重新启动,保证服务进程能够服务用户 ...
- SQL008存储过程总结
1.如何调用存储过程 DECLARE @Id INT --输入参数 DECLARE @OutPutID INT --输出参数 EXEC [dbo].Order_SellPR @Id,@OutPutID ...
- django和flask关于oralce数据库配置
Django中关于Oracle数据库配置 # 使用SERVICE_NAME DATABASES = { 'default': { 'ENGINE': 'django.db.backends.oracl ...
- 纯js遍历json获取值动态为select添加option
遍历json数组 并动态为select添加option 直接上代码,重要部分有注解 <!DOCTYPE html> <html lang="en"> < ...