#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 ...
随机推荐
- 程序员应具备的PS基本技能(二):程序员切图最常使用的工具组-选择工具组
若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...
- 优雅使用前端枚举Enum,符合国标的那种!
01.什么是枚举Enum? 枚举Enum是在多种语言中都有的一种数据类型,用于表示一组特定相关的常量数据集合,如性别(男.女).数据状态(可用.禁用).垂直对齐(顶端.居中.底部).星期等.特点是数据 ...
- locals和globals,函数的嵌套,nonlocal,闭包函数及特点以及匿名函数---day11
1.locals和globals 1.1locals 获取当前作用域中的所有内容 locals 如果在函数外,调用locals(),获取打印的是打印之前的所有变量,返回字典,全局空间作用域 loca ...
- 【WiFi开发全攻略】WIFI基础知识大全
[WiFi开发全攻略]WIFI基础知识大全 1. Wi-Fi起源 现在我们大家对Wi-Fi肯定都不陌生,无论是笔记本,手机,智能电视,都离不开Wi-Fi.目前我们一般用的都是Wi-Fi5,Wi-Fi6 ...
- sql注入简单初
import requests,sys,time from PyQt5.QtWidgets import * from PyQt5.QtGui import QIcon from threading ...
- DataGear 制作基于 three.js 的 3D 数据可视化看板
DataGear专业版 1.0.0 已发布,欢迎试用! http://datagear.tech/pro/ DataGear 支持采用原生的HTML.JavaScript.CSS制作数据可视化看板,也 ...
- 【Azure 应用服务】用App Service部署运行 Vue.js 编写的项目,应该怎么部署运行呢?
问题描述 用App Service部署运行 Vue.js 编写的项目,应该怎么部署运行呢? 问题解答 VUE通常是运行在客户端侧的JS框架. App Service 在这种场景中是以静态文件的形式提供 ...
- 【Azure Redis 缓存】如何使得Azure Redis可以仅从内网访问? Config 及 Timeout参数配置
问题描述 问题一:Redis服务,如何可以做到仅允许特定的子网内的服务器进行访问? 问题二:Redis服务,timeout和keepalive的设置是怎样的?是否可以配置成timeout 0? 问题三 ...
- CPNtools协议建模安全分析---实例变迁标记(五)
之前的说了库所的标记,现在我们开始加讲变迁标记 1.描述变迁的标记有四种类型,分别是变迁的标记,门卫的标记,世间的标记,代码片段的标记. 咋变迁中限制更严格的输入token,其中Code Segeme ...
- ReACT介绍与llama_index ReActAgent实践
Agent是大模型的重要应用方向,而ReACT是学术界提出的重要方法,本文介绍ReACT论文,然后通过llama_index ReActAgent来分析ReACT的执行过程. ReACT <RE ...