BZOJ---4484:[Jsoi2015]最小表示【bitset】
题面:
BZOJ---4484
题意:
给定一张有向无环图,求最多能删多少条边使得原图的联通性不变
分析:
设从一个点出发的一条边能到达的点为一个集合,那么这个点所有出边的集合的并就是该点能到达的点的集合,只需要删掉那些没有做出贡献的边即可,当然需要贪心的删除,先按照每个集合的贡献排序,从大到小依次选,如果当前集合不能做出贡献,那就删除它,这个集合正好可以用bitset表示,按理说复杂度也是(n*m/32),但跑得十分慢
代码:
#include <bits/stdc++.h>using namespace std;
const int maxn = 3e4+34;
int n,m,u,v,cnt,res,head[maxn],vis[maxn];
struct edge{int to,nxt;
}e[maxn<<2];
inline void add(int u,int v){e[++cnt].to = v;e[cnt].nxt = head[u];head[u] = cnt;
}
bitset<maxn> b[maxn];
#define f first
#define pii pair<bitset<maxn>,int>
bool cmp(pii a,pii b){return a.second > b.second;
}
void dfs(int u){if(vis[u]) return ;vis[u] = 1; b[u].set(u);vector<pii> ve; //储存每条出边能到达点的集合for(int i = head[u]; i ;i=e[i].nxt){int v = e[i].to; dfs(v);ve.push_back(pii(b[v],b[v].count()));}sort(ve.begin(),ve.end(),cmp);for(int i = 0;i < (int)ve.size(); ++i){if((b[u]|ve[i].f) != b[u]) b[u] |= ve[i].f;else res++;}
}
void solve(){for(int i = 1;i <= n; ++i){if(!vis[i]) dfs(i);}printf("%d",res);
}
int main(){scanf("%d %d",&n,&m);while(m--){scanf("%d %d",&u,&v);add(u,v);}solve();return 0;
}
BZOJ---4484:[Jsoi2015]最小表示【bitset】相关推荐
- P6134 [JSOI2015]最小表示(拓扑排序递推 + bitset优化,可达性统计变种)
整理的算法模板合集: ACM模板 P6134 [JSOI2015] 题目要求删除一条边整个图的连通性是不受影响的,也就是说如果我们要删除边(x,y)(x,y)(x,y),删除以后整个图的连通性不受影响 ...
- [BZOJ4484][JSOI2015]最小表示(拓扑排序+bitset)
有一个结论:对于边<u,v>,若这是u到v的唯一路径,则这条边显然不可被删去,否则必然可以被删去. 因为若u到v还有其它路径,则必然是从u到某个点x再到v,由于最终答案中连通性不变,也就是 ...
- bzoj 3144(最小割)
传送门 最小割,主要考查建边的思路.本蒟蒻也是看了好几位大佬的博客才看懂.比如: 参考1 参考2 (x,y,z)连接(x,y,z+1)容量为f(x,y,z) (x,y,z)连接(x',y',z-d)容 ...
- 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 2453: 维护队列 Bzoj 2120: 数颜色 分块,bitset
2453: 维护队列 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 578 Solved: 247 [Submit][Status][Discus ...
- 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集 ...
最新文章
- arthas-Java诊断工具
- POJ-1386 Play on Words 有向图欧拉通路判定
- 最大似然估计_状态估计的基本概念(2)最大似然估计和最大后验估计
- 一个jdbc connection连接对应一个事务
- java的平方分之x的平方加xy_Java面试宝典_基础编程练习题_完全平方数
- 那些年我们踩过的坑-NSTimer
- mysql查询,left join(求并集),where(求交集)
- 744..寻找比目标字母大的最小字母(力扣leetcode) 博主可答疑该问题
- python调用so文件
- 怎样用计算机编码出文字,计算机汉字编码主要有哪些方式
- B. Silly Mistake
- win10安装navisworks失败,怎么强力卸载删除注册表并重新安装
- 魔兽世界燃烧的远征服务器状态,魔兽世界燃烧的远征前夕补丁 燃烧的远征副本介绍...
- 【简●解】[SDOI2008] Sue的小球
- canvas改变图片原始尺寸
- matlab-微分方程求解方法汇总
- 开关电源的开关管一般用MOS管而不是三极管原因
- 什么是软链接、硬链接
- 1089 狼人杀-简单版(C语言实现)
- 记2019年高教杯全国大学生数学建模竞赛
热门文章
- 【您有一封来自阿里云的邀请函】阿里云成都客户服务中心20+职位虚席以待,来吧,成就最好的自己!...
- 程序员之富爸爸穷爸爸思考
- 什么是DDL?其含义及其常用命令解析
- 路由器密码重置(不是适用于所有有些启动顺序数字不一样)
- android 百度导航没有声音,百度导航Android版问题集
- 计算机中应用g,CH340g使用说明详解 - 全文
- java程序员推荐记笔记_推荐一款开源免费的笔记软件,也是程序员的好帮手
- Chrome浏览器关闭地址栏的搜索记录
- 小程序轮播图 swiper当前滑块容器样式
- jquery学习总结