题目描述
对于一张有向图,定义d(u,v,w)为从u号点出发,不经过v号点,最终到达w号点的最短路径长度。如果不存在这样的路径,d(u,v,w)的值为−1。
你也可以认为d(u,v,w)是删去v点和其相关的边后,图中u到w的最短路。
现在给定这张有向图每两个点之间的有向边的长度(如果不存在连边则为−1),对于所有满足1≤x,y,z≤n,x≠y,y≠z的有序数对(x,y,z),求它们d(x,y,z)的和。
你可以借助样例一解释来理解上面这句话的意思。
输入
第一行输入一个正整数n,表示该地区的点数。

接下来输入n行,每行输入n个整数。第i行第j个数Gi,j表示从i号点到j号的有向路径长度。如果这个数为−1,则表示不存在从i号点出发到j号点的路径。

输出
输出一个整数表示答案。

样例输入
3
0 1 -1
100 0 2
-1 -1 0

样例输出
100

提示

思路
每次分治假设(l,r)的区间为被删去的边,利用cdq分治递推即可得解

代码实现

#pragma GCC optimize(3,"Ofast","inline")
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int N=305;
const int M=1e5+5;
const int INF=0x3f3f3f3f;
const ll LINF=5e18;
const ull sed=31;
const ll mod=19260817;
const double eps=1e-5;
const double PI=acos(-1.0);
typedef pair<int,int>P;
typedef pair<double,double>Pd;template<class T>void read(T &x)
{x=0;int f=0;char ch=getchar();while(ch<'0'||ch>'9') {f|=(ch=='-');ch=getchar();}while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}x=f?-x:x;return;
}template <typename T> inline void write(T x)
{if(x<0) putchar('-'), x = -x;if(x >= 10) write(x/10);putchar(x%10+'0');
}int n,mp[N][N];ll cal(int l,int r)
{ll ret=0;if(l==r){for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if(i!=l && j!=l && i!=j){if(mp[i][j]>=INF) ret-=1;else ret+=mp[i][j];}}}return ret;}int tmp[N][N];int mid=(l+r)>>1;memcpy(tmp,mp,sizeof(mp));for(int k=mid+1;k<=r;k++)for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)mp[i][j]=min(mp[i][j],mp[i][k]+mp[k][j]);ret+=cal(l,mid);memcpy(mp,tmp,sizeof(mp));for(int k=l;k<=mid;k++)for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)mp[i][j]=min(mp[i][j],mp[i][k]+mp[k][j]);ret+=cal(mid+1,r);memcpy(mp,tmp,sizeof(mp));return ret;
}int main()
{//freopen("a.txt","r",stdin);read(n);for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){read(mp[i][j]);if(mp[i][j]==-1) mp[i][j]=INF;}}printf("%lld\n",cal(1,n));return 0;
}

路径和(cdq分治)相关推荐

  1. CF603E-Pastoral Oddities【CDQ分治,可撤销并查集】

    正题 题目链接:https://www.luogu.com.cn/problem/CF603E 题目大意 开始时有nnn个点,没有边. 依次加入mmm条带权的边,每次加入后询问是否存在一个边集,满足每 ...

  2. 2021牛客暑期多校训练营3 G-Yu Ling(Ling YueZheng) and Colorful Tree(cdq分治)

    G-Yu Ling(Ling YueZheng) and Colorful Tree HOWARLI题解 大致做法就是首先考虑哪些修改可能影响询问,当修改点权是询问的倍数时才可能影响询问.于是考虑把他 ...

  3. BZOJ 4285 使者 (CDQ分治+dfs序)

    题目传送门 题目大意:给你一棵树,有三种操作,在两个点之间连一个传送门,拆毁一个已有的传送门,询问两个点之间的合法路径数量.一条合法路径满足 1.经过且仅经过一个传送门 2.不经过起点终点简单路径上的 ...

  4. 点分治+CDQ分治+整体二分全纪录

    点分治 点分治讲解 解决树上路径问题 经典例题:点分治(长度小于m的路径计数) 经典例题:点分治(聪聪可可) 经典例题:点分治(多个定值路径计数) 经典例题:点分治(采药) 经典例题:点分治+ST表+ ...

  5. 【BZOJ3456】【CDQ分治+FNT】城市规划

    试题来源 2013中国国家集训队第二次作业 问题描述 刚刚解决完电力网络的问题, 阿狸又被领导的任务给难住了. 刚才说过, 阿狸的国家有n个城市, 现在国家需要在某些城市对之间建立一些贸易路线, 使得 ...

  6. BZOJ 1176[Balkan2007]Mokia (cdq分治,矩阵加矩阵求和)

    BZOJ 1176[Balkan2007]Mokia (cdq分治,矩阵加矩阵求和) Description 维护一个W*W的矩阵,初始值均为S.每次操作可以增加某格子的权值,或询问某子矩阵的总权值. ...

  7. 【BZOJ-3456】城市规划 CDQ分治 + NTT

    题目链接 http://www.lydsy.com/JudgeOnline/problem.php?id=3456 Solution 这个问题可以考虑dp,利用补集思想 N个点的简单图总数量为$2^{ ...

  8. BZOJ 1176: [Balkan2007]Mokia( CDQ分治 + 树状数组 )

    考虑cdq分治, 对于[l, r)递归[l, m), [m, r); 然后计算[l, m)的操作对[m, r)中询问的影响就可以了. 具体就是差分答案+排序+离散化然后树状数组维护.操作数为M的话时间 ...

  9. bzoj2961 共点圆 (CDQ分治, 凸包)

    /* 可以发现可行的圆心相对于我们要查询的点是在一个半平面上, 然后我们要做的就是动态维护凸壳然后用这个半平面去切它 看看是否是在合法的那一面然后cdq分治就可以了代码基本是抄的,*/#include ...

最新文章

  1. 开发系统平台常用的-MVC设计模式简介
  2. Golang入门教程(十七)Linux/Windows下快速搭建和配置NSQ
  3. MySQL 数据库常用命令小结
  4. Android——Activity去除标题栏和状态栏
  5. 汽车电子专业知识篇(九)-charge pump的原理介绍
  6. mysql 5.7.20 win64_Win10下MySQL5.7.20 Mysql(64位)解压版安装及bug修复
  7. ajax常见的status状态码
  8. 预约挂号费用保险赔吗?
  9. python适用于哪些芯片_这些鲜为人知的Python功能,你值得拥有!
  10. oracle连接ORA-01017、ORA-12640
  11. vue element-plus 插件
  12. ArcGIS Pro 中检查尖锐角步骤
  13. 关于学习Android的三个终极问题
  14. 计算机是否能安装64位操作系统,电脑装32位还是64位系统
  15. 光耦应用电路设计方法
  16. SpringBoot官方开发工具,热部署和远程调试真带劲
  17. 算法思想理解系列 -- 检索排序学习之pairwise类型
  18. 机器学习笔记 - 学习朴素贝叶斯概念及应用
  19. mysql 日期查询下周,MySQL时间函数的使用:查询本周、下周、本月、下个月份的数据【转】...
  20. 汽车维修管理系统C语言代码,大智慧汽车维修管理系统

热门文章

  1. IO模型(阻塞,非阻塞,多路复用)
  2. 微信公众平台接口测试帐号申请流程
  3. 系统的频域分析法-----Chap4_5-8
  4. w500 安装mac
  5. 为啥说外包公司不能去?
  6. 大数据挖掘永恒的定律?符号回归(Symbolic Regressor)
  7. 汽车鸿蒙音响怎么调,汽车音响怎么调试 汽车音响调试步骤方法【详细介绍】...
  8. win7摄像头软件_5款用起来超爽的Windows高效软件
  9. Carsim与Simulink联仿Carsim找不到Matlab错误的解决方案,此前装过多个Matlab版本出现该问题可以尝试此方法
  10. 如何重启 php-fpm