整理的算法模板合集: ACM模板


P6134 [JSOI2015]

题目要求删除一条边整个图的连通性是不受影响的,也就是说如果我们要删除边(x,y)(x,y)(x,y),删除以后整个图的连通性不受影响的条件很明显就是x到y之间至少还有一条边可以到达。所以我们要统计每对点之间的路径条数,对于每一条边(x,y)(x, y)(x,y)来说,如果xy之间至少有两条路径,那么这一条边就可以删除,ans++ 。由于这是一个有向无环图,所以保证正确性。
我们直接拓扑排序,类似可达性统计的那一道题,我们可以用bitset存,先处理出每对点路径条数大于等于1的,用A存,再处理路径条数大于等于2的情况,用B存,我们只需要按照拓扑序倒序递推,对于每一对点x和y,B加上A[x] & A[y]表示x能到达z,y也能到达,z那么说明x和y之间至少还有一条边都能到达z,也就是x与y之间的路径条数至少大于等于2。

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<string>
#include<bitset>
#include<queue>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;//卡精度
typedef pair<int,int> PII;const int N = 3e4+7, M = 3e5 + 7;
const ll mod = 1e9+7;
const ll INF = 1e15+7;
const double EPS = 1e-10;//可近似为趋近为 0 可以根据定义求导时使用
const int base = 131;//base = 13331 // hashbitset<N>A[N], B[N];
int n, m;
int head[N], ver[M], edge[M], nex[M], tot;
int in[N];
int ans[M], top;void add(int x, int y)
{ver[tot] = y;nex[tot] = head[x];head[x] = tot ++ ;in[y] ++ ;
}void toposort()
{queue<int>q;for(int i = 1; i <= n; ++ i)if(in[i] == 0)q.push(i);while(q.size()){int x = q.front();q.pop();ans[++ top] = x;for(int i = head[x]; ~i; i = nex[i]){int y = ver[i];in[y] -- ;if(in[y] == 0)q.push(y);}}return ;
}void solve()
{for(int k = top ;k >= 1; -- k){int x = ans[k];for(int i = head[x]; ~i; i = nex[i]){int y = ver[i];//我们倒序从叶子节点开始B[x] |= (A[y] & A[x]);//y能到,x也能到,并且x可以到y说明x到y至少有2条路径A[x] |= A[y];}}
}int main()
{memset(head, -1, sizeof head);scanf("%d%d", &n, &m);for(int i = 1; i <= m; ++ i){int x, y;scanf("%d%d", &x, &y);add(x, y);}for(int i = 1; i <= n; ++ i)A[i][i] = 1;toposort();solve();int ans = 0;for(int x = 1; x <= n; ++ x){for(int i = head[x]; ~i; i = nex[i]){int y = ver[i];if(B[x][y] == 1)ans ++ ;//这里应该判断x到y==1}}//for(int i = 1; i <= n; ++ i)//可以直接交可达性统计那一道题//    printf("%d\n", A[i].count());printf("%d\n", ans);return 0;
}

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

  1. 2019 ICPC Asia Nanjing Regional C.Digital Path(拓扑排序递推DP)

    整理的算法模板合集: ACM模板 题目传送门 三段题面,只有第三段是有用的-前两段又长单词又难懂,就是在讲故事...不过针对四种情况给出四个图帮助我们理解题意是真的赞,可能出题人怕我们看不懂吧(第一句 ...

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

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

  3. 拓扑排序----Kahn算法和字典序最小的拓扑排序

    一.拓扑排序定义: 二.卡恩算法(Kahn): 1.Kahn算法介绍: 有向无环图DAG至少具有一个度数为0的顶点和一个度数为0的顶点. 证明:上述事实有一个简单的证明,即DAG不包含循环,这意味着所 ...

  4. 矩阵乘法递推的优化艺术

    对于一个线性递推式,求它第项的值,通常的做法是先构造一个的矩阵,然后在时间内求出. 其实,由于这个矩阵的特殊性,可以将时间优化到.接下来我会以一个题目来讲解矩阵乘法递推的优化. 题目:http://w ...

  5. 解题报告:NOIP2013 车站分级(拓扑序递推求解差分约束、建图优化O(n+m)) 超详细讲解

    本题是2013年NOIP普及组的压轴题 差分约束裸题. 计算当前线路中最小的级别(比较始发站和终点站). 整条线路中所有大于这个级别的都必须停靠 所有未停靠的站点的级别一定小于这个级别 也就是说所有未 ...

  6. 中石油训练赛 - Swapping Places(字典序最小的拓扑排序)

    题目链接:点击查看 题目大意:给出 s 个字符串表示种类,再给出 m 个朋友关系,表示两个种类的动物是朋友,现在给出一个长度为 n 的种类排列,规定相邻两个是朋友的种类的动物可以交换位置,问如何操作, ...

  7. 2287. 【POJ Challenge】消失之物(数组递推\分治优化背包)

    2287. [POJ Challenge]消失之物 这题的思想和P4564 [CTSC2018]假面优化的思想一样,应该反过来说,假面那个题应该是借鉴这题的思路. 显然不能枚举每个物品消失O(n)O( ...

  8. 可达性统计(拓扑排序逆推)

    给定一张N个点M条边的有向无环图,分别统计从每个点出发能够到达的点的数量. 输入格式 第一行两个整数N,M,接下来M行每行两个整数x,y,表示从x到y的一条有向边. 输出格式 输出共N行,表示每个点能 ...

  9. 【拓扑排序】【bitset】Gym - 101128A - Promotions

    给你一张DAG,若选择u点,则必须先选择所有能到达其的点.问你在选择A个点的情况下,哪些点必选:选择B个点的情况下,哪些点必选:选择B个点的情况下,哪些点一定不选. 选择A个点的情况,必选的点是那些其 ...

最新文章

  1. CSS属性display:inline-block使用揭秘
  2. 数据库连接池DBPool分析(一):简介
  3. Android 使用SWIG生成Jni代码
  4. BSP application view instance lifetime analysis
  5. 一个代码托管平台居然公开拒招中国人,谁给了你歧视中国程序员的勇气?
  6. 辞职腾讯去了小公司,从0到1搭建后端架构,工资就翻倍了
  7. “猿式浪漫”:Java小白也能写出的表白程序
  8. locat add filter
  9. java 不安全操作_Java新手求助:怎么会出现使用了未经检查或不安全的操作。
  10. 如何免费下载百度文库、豆丁网等网站的文档
  11. PHP商城网站绑定中国银联在线支付接口
  12. 如何通过抖音来进行广告宣传
  13. 测试工具 - CDSpace(HTTP接口)
  14. 无法显示计算机列表,W7系统Internet Explorer无法显示该页面
  15. 不良资产证券化中信用评级国外发展史
  16. CouchDB的简单使用
  17. jQuery.validationEngine插件使用
  18. python矩阵拼接_numpy数组拼接简单示例_python
  19. 图集:微软的Ajax工具包
  20. Failed to introspect Class...from ClassLoader...java.lang.ClassNotFoundException,IDEA启动没问题,jar包启动报错

热门文章

  1. 深度图像检测算法总结与对比
  2. 可复现的图像降噪算法总结——超赞整理
  3. 遥感图像+CNN,预测区域人口收入水平
  4. 都996了,需求还是没法按时交付,怎么办?
  5. MySQL进阶SQL优化
  6. 浅谈Greenplum的Boolean类型与Text类型之间的转换
  7. MultipartFile类常用的一些方法
  8. 使用idea 时出现classnotfound
  9. python 内置函数
  10. 《基于场景的工程方法》作者问答录