#floyd,分治#D 路径之和
题目
对于每个\(y\),求除了\(y\)之外,其余的所有点组成的有序点对\((x,z)\)
不经过\(y\)的最短路长度之和(不存在即为-1)。\(n\leq 320\)
分析
太妙了,首先用floyd朴素就是\(O(n^4)\)
由于朴素算法有很多冗余状态,
考虑分治处理,\([l,r]\)表示当前区间以外进行过floyd
对于\(l=r\)的时候直接统计答案,否则拆成\([l,mid],[mid+1,r]\)
然后计算左区间对右区间和右区间对左区间的贡献,时间复杂度\(O(n^3\log n)\)
代码
#include <cstdio>
#include <cctype>
#include <cstring>
#define rr register
using namespace std;
const int N=321,inf=0x3f3f3f3f;
int dis[10][N][N],n; long long ans;
inline signed iut(){
rr int ans=0,f=1; rr char c=getchar();
while (!isdigit(c)) f=(c=='-')?-f:f,c=getchar();
while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();
return ans*f;
}
inline void Min(int &a,int b){a=a<b?a:b;}
inline void divi(int dep,int l,int r){
if (l==r){
for (rr int i=1;i<=n;++i)
for (rr int j=1;j<=n;++j)
if ((i^j)&&(i^r)&&(j^r)){
if (dis[dep][i][j]^inf) ans+=dis[dep][i][j];
else --ans;
}
return;
}
rr int mid=(l+r)>>1;
memcpy(dis[dep+1],dis[dep],sizeof(dis[dep]));
for (rr int k=mid+1;k<=r;++k)
for (rr int i=1;i<=n;++i)
for (rr int j=1;j<=n;++j)
if ((i^j)&&(i^k)&&(j^k))
Min(dis[dep+1][i][j],dis[dep+1][i][k]+dis[dep+1][k][j]);
divi(dep+1,l,mid);
memcpy(dis[dep+1],dis[dep],sizeof(dis[dep]));
for (rr int k=l;k<=mid;++k)
for (rr int i=1;i<=n;++i)
for (rr int j=1;j<=n;++j)
if ((i^j)&&(i^k)&&(j^k))
Min(dis[dep+1][i][j],dis[dep+1][i][k]+dis[dep+1][k][j]);
divi(dep+1,mid+1,r);
}
signed main(){
freopen("sum.in","r",stdin);
freopen("sum.out","w",stdout);
n=iut();
for (rr int i=1;i<=n;++i)
for (rr int j=1;j<=n;++j){
dis[0][i][j]=iut();
if (dis[0][i][j]<0)
dis[0][i][j]=inf;
}
divi(0,1,n);
return !printf("%lld",ans);
}
#floyd,分治#D 路径之和的更多相关文章
- [Codeforces 553E]Kyoya and Train(期望DP+Floyd+分治FFT)
[Codeforces 553E]Kyoya and Train(期望DP+Floyd+分治FFT) 题面 给出一个\(n\)个点\(m\)条边的有向图(可能有环),走每条边需要支付一个价格\(c_i ...
- [LeetCode] Path Sum II 二叉树路径之和之二
Given a binary tree and a sum, find all root-to-leaf paths where each path's sum equals the given su ...
- [leetcode] Path sum路径之和
要求给定树,与路径和,判断是否存在从跟到叶子之和为给定值的路径.比如下图中,给定路径之和为22,存在路径<5,4,11,2>,因此返回true;否则返回false. 5 / \ 4 8 / ...
- [LeetCode] 113. Path Sum II 二叉树路径之和之二
Given a binary tree and a sum, find all root-to-leaf paths where each path's sum equals the given su ...
- [USACO09DEC]牛收费路径Cow Toll Paths(floyd、加路径上最大点权值的最短路径)
https://www.luogu.org/problem/P2966 题目描述 Like everyone else, FJ is always thinking up ways to increa ...
- POJ 1741 [点分治][树上路径问题]
/* 不要低头,不要放弃,不要气馁,不要慌张 题意: 给一棵有n个节点的树,每条边都有一个正权值,求一共有多少个点对使得它们之间路的权值和小于给定的k. 思路: <分治算法在树的路径问题中的应用 ...
- 【floyd存字典序路径】【HDU1385】【Minimum Transport Cost】
题目大意 求多组i到j的最短路径 并输出字典序最小.... 现在只会floyd的方式 利用dis[i][j] 表示i到j的路径中i 后面的节点 更新是比较dis[i][j] dis[i][k]. 记住 ...
- 2016计蒜之道复赛 百度地图的实时路况(Floyd 分治)
题意 题目链接 Sol 首先一个结论:floyd算法的正确性与最外层\(k\)的顺序无关(只要保证是排列即可) 我大概想到一种证明方式就是把最短路树上的链拿出来,不论怎样枚举都会合并其中的两段,所以正 ...
- LeetCode Path Sum 判断树的路径之和
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; ...
- POJ-2594 Treasure Exploration floyd传递闭包+最小路径覆盖,nice!
Treasure Exploration Time Limit: 6000MS Memory Limit: 65536K Total Submissions: 8130 Accepted: 3 ...
随机推荐
- python中的泛型使用TypeVar
引入为什么需要TypeVar PEP484的作者希望借助typing模块引入类型提示,不改动语言的其它部分.通过精巧的元编程技术,让类 支持[]运算不成问题.但是方括号内的T变量必须在某处定义,否则要 ...
- 为产品的一堆Visual Studio解决方案引入Directory.Build.props
为什么需要Directory.Build.props? 一个产品有了多个甚至几十个解决方案之后,每个解决方案里面的项目可能会引用一个dll包的不同版本,因此需要集中管理dll包的版本号. .NET的D ...
- ASP.NET Core 选项
目录 1,选项接口 2,注入配置与IOptions 3,IOptionsSnapshot 首先要了解 ASP.NET Core 中的配置,请点击这里了解:https://www.cnblogs.com ...
- CodeGeeX vscode代码提示,智能问答
CodeGeeX 官网 https://codegeex.cn/zh-CN/ CodeGeeX vscode代码提示,智能问答
- manjaro配置软件源
sudo pacman-mirrors -i -c China -m rank从中选择最快的软件源!
- 基于DSP的光纤麦克风声音采集系统硬件设计方案总结
前记 光纤声传感器是一种利用光纤作为传光介质或探测单元的一类声传感器,相比传统电声传感器其具有灵敏度高.频带响应宽.抗电磁干扰等优越特性,可广泛应用于国防安全.工业无损检测.医疗诊断及消费电子等领域 ...
- 谈谈Android中的消息提示那些坑
Android中的消息提示无非就那几种,弹个窗(Toast或SnackBar),或者是弹出个对话框(Dialog),最近在使用的时候也是遇到了问题,有时候导致APP闪退 稍微研究会,总结了一下使用过程 ...
- 毕设系列之Linux V4L2(图形图像采集篇)
PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明 本文作为本人csdn blog的主站的备份.(Bl ...
- [503. 下一个更大元素 II] 单调栈
import java.util.ArrayDeque; import java.util.Deque; class Solution { public static void main(String ...
- Spring Boot学习日记9
在springboot项目中的resources目录下新建一个文件 application.yml 编写一个实体类 Dog: package com.example.springboot02confi ...