百度地图的实时路况

百度地图的实时路况功能相当强大,能方便出行的人们避开拥堵路段。一个地区的交通便捷程度就决定了该地区的拥堵情况。假设一个地区有 nn 个观测点,编号从 11 到 nn。定义 d(u,v,w)d(u,v,w) 为从 uu 号点出发,严格不经过 vv 号点,最终到达 ww 号点的最短路径长度,如果不存在这样的路径,d(u,v,w)d(u,v,w) 的值为 -1−1。

那么这个地区的交通便捷程度 PP 为:

P = \sum_{1 \leq x,y,z \leq n , x \neq y , y \neq z}{d(x,y,z)}P=∑1≤x,y,z≤n,x?=y,y?=z?d(x,y,z)

现在我们知道了该地区的 nn 个点,以及若干条有向边,求该地区的交通便捷程度 PP。

输入格式

第一行输入一个正整数 n(4 \leq n \leq 300)n(4≤n≤300),表示该地区的点数。

接下来输入 nn 行,每行输入 nn 个整数。第 ii 行第 jj 个数 G_{i,j}(-1 \leq G_{i,j} \leq 10000;G_{i,i} = 0)Gi,j?(−1≤Gi,j?≤10000;Gi,i?=0) 表示从 ii 号点到 jj 号的有向路径长度。如果这个数为 -1−1,则表示不存在从 ii 号点出发到 jj号点的路径。

输出格式

输出一个整数,表示这个地区的交通便捷程度。

样例输入复制

4
0 1 -1 -1
-1 0 1 -1
-1 -1 0 1
1 -1 -1 0

样例输出复制

4
#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
const int maxn = 305;
const ll mod = 1e9 + 7;

int n;
int dis[maxn][maxn];

inline ll solve(int l,int r){
    ll res=0;
    if(l==r){
        for(register int i=1;i<=n;++i){
            for(register int j=1;j<=n;++j){
                if(i!=l&&j!=l){
                    res+=dis[i][j];
                }
            }
        }
        return res;
    }
    int pre[maxn][maxn];
    int mid=l+(r-l>>1);
    memcpy(pre,dis,sizeof(dis));
    for(register int k=mid+1;k<=r;++k){
        for(register int i=1;i<=n;++i){
            if(i==k)continue;
            for(register int j=1;j<=n;++j){
                if(i==j||k==j)continue;
                if(~dis[i][k]&&~dis[k][j]) {
                    if (~dis[i][j]) {
                        dis[i][j] = min(dis[i][j], dis[i][k] + dis[k][j]);
                    } else {
                        dis[i][j] = dis[i][k] + dis[k][j];
                    }
                }
            }
        }
    }
    res+=solve(l,mid);
    memcpy(dis,pre,sizeof(pre));
    for(register int k=l;k<=mid;++k){
        for(register int i=1;i<=n;++i){
            if(k==i)continue;
            for(register int j=1;j<=n;++j){
                if(k==j||i==j)continue;
                if(~dis[i][k]&&~dis[k][j]) {
                    if (~dis[i][j]) {
                        dis[i][j] = min(dis[i][j], dis[i][k] + dis[k][j]);
                    } else {
                        dis[i][j] = dis[i][k] + dis[k][j];
                    }
                }
            }
        }
    }
    res+=solve(mid+1,r);
    memcpy(dis,pre,sizeof(pre));
    return res;
}

int main() {
#ifndef ONLINE_JUDGE
    freopen("1.txt", "r", stdin);
#endif
    scanf("%d",&n);
    for(register int i=1;i<=n;++i){
        for(register int j=1;j<=n;++j){
            scanf("%d",&dis[i][j]);
        }
    }
    printf("%lld",solve(1,n));
    return 0;
}

原文地址:https://www.cnblogs.com/czy-power/p/11464996.html

时间: 2024-11-08 22:07:47

百度地图的实时路况的相关文章

2016计蒜之道复赛A 百度地图的实时路况

百度地图的实时路况功能相当强大,能方便出行的人们避开拥堵路段.一个地区的交通便捷程度就决定了该地区的拥堵情况.假设一个地区有 nnn 个观测点,编号从 111 到 nnn.定义 d(u,v,w)d(u,v,w)d(u,v,w) 为从 uuu 号点出发,严格不经过 vvv 号点,最终到达 www 号点的最短路径长度,如果不存在这样的路径,d(u,v,w)d(u,v,w)d(u,v,w) 的值为 −1-1−1. 那么这个地区的交通便捷程度 PPP 为: P=∑1≤x,y,z≤n,x≠y,y≠zd(x

2016计蒜之道复赛 百度地图的实时路况 floyd+cdq分治

链接:https://nanti.jisuanke.com/t/11217 奉上官方题解: 枚举 d(x , y , z) 中的 y,把 y 从这个图中删去,再求这时的全源最短路即可,使用 Floyd 算法来做上述过程. Floyd 算法可以是一个增量的过程,虽然第一维一般都是从 1枚举到 k但是这个枚举的顺序并不影响最后的结果. 所以如果可以预处理出对于每个点 y,只剩 y 没有在 Floyd 的第一维枚举到的矩阵,这个矩阵的值就是不经过 y 点的全源最短路. 所以使用分治,每一次把点集拆成两

[计蒜客]百度地图的实时路况

description 给出有向图的点数\(n\)和邻接矩阵\(G\), 求\[P=∑_{1≤x,y,z≤n,x≠y,y≠z}d(x,y,z)\] 其中\(d(x,y,z)\)表示从\(x\)不经过\(y\)到\(z\)的最短路,如果无法到达则为\(-1\) data range \[4≤n≤300,?1≤G_{i,j}≤10000,G_{i,i}=0\] solution 首先你要知道\(floyed\)的本质是枚举中转点. 那么不经过\(y\)点的最短路矩阵相当于使用除\(y\)以外的点作为

2016计蒜之道复赛 百度地图的实时路况 分治+Floyd

题目链接:https://nanti.jisuanke.com/t/A1108 这道题还挺有意思的.让我对Floyd的了解又加深了一点. 首先我们重新审视Floyd这三重循环到底有什么用?第一层是枚举中间结点,第二三层是枚举路径起点和终点.那么是不是当第一层循环还没枚举到的点,此时的最短路就不会经过这这些点呢? 答案是肯定的.所以这道题也就可以做了. 题目是要求我们计算  第一层循环缺一个点的情况下  的所有最短路之和.我们当然可以枚举这个缺的点,那么时间复杂度是O(n^4).不能接受. 那么我

百度地图的实时路况 2016 计蒜之道 复赛

https://nanti.jisuanke.com/t/A1108 way1: 应该很多同学的做法都是对于每次y,每次x,dijkstra+堆优化 n^2 * nlogn 其实log(300)很小... way2: 题解方法真心优秀!!! cdq分治 有助于理解floyd:每次加入一个可以使用的点,加n次,顺序可以调整 本题:对于每个y,仅仅是y点不能使用 每次计算1/2,cdq剩下的1/2(left,right分别来一次),直到只剩下一个数,这个点不用于求最短路.所有点都有且仅有一次出现“只

百度地图绘制实时路线以及最短线路规划

如何使用百度地图绘制实时路线以及最短线路规划 最近在做百度地图的实时路线绘制,发现一些问题,比如由于定位漂移带来的路线绘制偏差,还有由于定位漂移,导致人未走动时,也会绘制路线等.百度鹰眼的线路纠偏个人感觉很一般啊.而且有限漂移了两百米的点他也没有纠正过来.所以最后还是决定自己写一个纠偏吧.而且百度地图官方的dome和示例代码真的很示例啊.然人摸不着头脑.ok进入正题,思路是这样的,因为实时绘制线路都是在室外,所以只采用gps定位,不采用无线网络定位.这样漂移一两百米的点基本不会出现.第二当人在等

[转]百度地图的一些应用方法

IOS百度地图API开发自定义气泡,点击气泡自动生成路线,以及拖拽IOS百度地图开发POISearch搜索附近停车场,附近加油站IOS百度地图视角跳到用户当前位置IOS百度地图开发实时路况IOS开发百度地图自动导航IOS开发百度地图在大头钉上加文字和图片,点击这个整体再弹出气泡IOS开发百度地图实现经纬度导航,无需地名. 第一部分--牛刀小试 百度地图零基础到各种效果界面.上面的几行不用看,那是为了SEO,就是为了让我这篇博客让更多的人搜索到,上面的问题我都已经解决,都在文章里面.下面是步骤:1

android socket 百度地图 实时定位

Socket服务 首先开启一个启动Socket的服务 publicclassSocketNetService extends Service{ privatefinal String TAG = "SocketNetService"; publicstatic Thread NetThread; publicstatic Socket socket; private InetAddress address; publicstaticbooleanisFristConn = true;

百度地图JavaScript API自定义覆盖物、自定义信息窗口增删时的显示问题

项目中,需求:在百度地图上实时画出车辆,并能点击车辆弹出信息框查看实时信息. 实现:通过不停的画覆盖物并删除掉.点击覆盖物时弹出信息窗口. 问题:删除掉覆盖物后信息窗也删除掉了.因为信息窗是建立在覆盖物的基础上的. 如何做到,我点击覆盖物弹出信息框,信息框能够持续显示实时信息,直到点击关闭? 做下笔记,包括了自定义覆盖物标识.自定义信息窗口.信息窗口显示实时信息.清除覆盖物时信息窗口的显示问题等等. 贴张效果图:     代码: <script type="text/javascript&