题面:

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】相关推荐

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

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

  2. [BZOJ4484][JSOI2015]最小表示(拓扑排序+bitset)

    有一个结论:对于边<u,v>,若这是u到v的唯一路径,则这条边显然不可被删去,否则必然可以被删去. 因为若u到v还有其它路径,则必然是从u到某个点x再到v,由于最终答案中连通性不变,也就是 ...

  3. bzoj 3144(最小割)

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

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

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

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

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

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

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

  7. Bzoj 2453: 维护队列 Bzoj 2120: 数颜色 分块,bitset

    2453: 维护队列 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 578  Solved: 247 [Submit][Status][Discus ...

  8. BZOJ 2127 happiness (最小割)

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

  9. Bzoj 2127 happiness 最小割

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

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

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

最新文章

  1. arthas-Java诊断工具
  2. POJ-1386 Play on Words 有向图欧拉通路判定
  3. 最大似然估计_状态估计的基本概念(2)最大似然估计和最大后验估计
  4. 一个jdbc connection连接对应一个事务
  5. java的平方分之x的平方加xy_Java面试宝典_基础编程练习题_完全平方数
  6. 那些年我们踩过的坑-NSTimer
  7. mysql查询,left join(求并集),where(求交集)
  8. 744..寻找比目标字母大的最小字母(力扣leetcode) 博主可答疑该问题
  9. python调用so文件
  10. 怎样用计算机编码出文字,计算机汉字编码主要有哪些方式
  11. B. Silly Mistake
  12. win10安装navisworks失败,怎么强力卸载删除注册表并重新安装
  13. 魔兽世界燃烧的远征服务器状态,魔兽世界燃烧的远征前夕补丁 燃烧的远征副本介绍...
  14. 【简●解】[SDOI2008] Sue的小球
  15. canvas改变图片原始尺寸
  16. matlab-微分方程求解方法汇总
  17. 开关电源的开关管一般用MOS管而不是三极管原因
  18. 什么是软链接、硬链接
  19. 1089 狼人杀-简单版(C语言实现)
  20. 记2019年高教杯全国大学生数学建模竞赛

热门文章

  1. 【您有一封来自阿里云的邀请函】阿里云成都客户服务中心20+职位虚席以待,来吧,成就最好的自己!...
  2. 程序员之富爸爸穷爸爸思考
  3. 什么是DDL?其含义及其常用命令解析
  4. 路由器密码重置(不是适用于所有有些启动顺序数字不一样)
  5. android 百度导航没有声音,百度导航Android版问题集
  6. 计算机中应用g,CH340g使用说明详解 - 全文
  7. java程序员推荐记笔记_推荐一款开源免费的笔记软件,也是程序员的好帮手
  8. Chrome浏览器关闭地址栏的搜索记录
  9. 小程序轮播图 swiper当前滑块容器样式
  10. jquery学习总结