分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 代码编程

D - Restoring Road Network

发布时间:2023-09-06 01:21责任编辑:苏小强关键词:暂无标签

原题地址:http://abc074.contest.atcoder.jp/tasks/arc083_b

Time limit : 2sec / Memory limit : 256MB

Score : 500 points

Problem Statement

In Takahashi Kingdom, which once existed, there are N cities, and some pairs of cities are connected bidirectionally by roads. The following are known about the road network:

  • People traveled between cities only through roads. It was possible to reach any city from any other city, via intermediate cities if necessary.
  • Different roads may have had different lengths, but all the lengths were positive integers.

Snuke the archeologist found a table with N rows and N columns, A, in the ruin of Takahashi Kingdom. He thought that it represented the shortest distances between the cities along the roads in the kingdom.

Determine whether there exists a road network such that for each u and v, the integer Au,v at the u-th row and v-th column of A is equal to the length of the shortest path from City u to City v. If such a network exist, find the shortest possible total length of the roads.

Constraints

  • 1≤N≤300
  • If ij1≤Ai,j=Aj,i≤109.
  • Ai,i=0

Inputs

Input is given from Standard Input in the following format:

NA1,1 A1,2  A1,NA2,1 A2,2  A2,NAN,1 AN,2  AN,N

Outputs

If there exists no network that satisfies the condition, print -1. If it exists, print the shortest possible total length of the roads.


Sample Input 1

Copy
30 1 31 0 23 2 0

Sample Output 1

Copy
3

The network below satisfies the condition:

  • City 1 and City 2 is connected by a road of length 1.
  • City 2 and City 3 is connected by a road of length 2.
  • City 3 and City 1 is not connected by a road.

Sample Input 2

Copy
30 1 31 0 13 1 0

Sample Output 2

Copy
-1

As there is a path of length 1 from City 1 to City 2 and City 2 to City 3, there is a path of length 2 from City 1 to City 3. However, according to the table, the shortest distance between City 1 and City 3 must be 3.

Thus, we conclude that there exists no network that satisfies the condition.


Sample Input 3

Copy
50 21 18 11 2821 0 13 10 2618 13 0 23 1311 10 23 0 1728 26 13 17 0

Sample Output 3

Copy
82

Sample Input 4

Copy
30 1000000000 10000000001000000000 0 10000000001000000000 1000000000 0

Sample Output 4

Copy
3000000000
题目意思:有一张地图上面标志着每个点之间最短路的大小;判断总路程;如果最短路和地图不符合就输出-1;
解题思路:Floyd算法,如果两点之间进行了中转就记录;最后遍历判断,把所有没有经过中转的路相加;
代码:
#include<iostream>#include<string>#include<algorithm>#include <string.h>#include <stdio.h>#include <math.h>#include <set>#include <queue>#include <stack>#include <map> using namespace std;typedef long long LL;const int MAX = 330; int visit[MAX][MAX]={0};LL Map1[MAX][MAX];LL Map[MAX][MAX];int N; int main(){ ???cin>>N; ???for(int i = 1;i<=N;i++) ???for(int j = 1;j<=N;j++) ???{ ???????cin>>Map[i][j]; ???????Map1[i][j] = Map[i][j]; ???} ???for(int k = 1;k<=N;k++) ???????for(int i = 1;i<=N;i++) ???????????for(int j = 1;j<=N;j++){ ???????????????if(Map[i][j]>=Map[i][k]+Map[k][j]&&(i!=k&&j!=k)){ ???????????????????//cout<<i<<" "<<j<<" "<<k<<endl; ???????????????????Map1[i][j] = Map[i][k]+Map[k][j]; ???????????????????visit[i][j] = 1; ???????????????} ???????????} ????LL sum = 0; ???for(int i = 1;i<N;i++){ ???????for(int j = i+1;j<=N;j++) ???????{ ???????????if(Map[i][j]!=Map1[i][j]){ ????????????????cout<<"-1"<<endl; ????????????????return 0; ???????????} ???????????if(Map[i][j]==Map1[i][j]&&visit[i][j]!=1) ???????????????sum+=Map[i][j]; ????????} ???} ???if(sum==0) ???????cout<<-1<<endl; ???else ???????cout<<sum<<endl; ?????return 0;}
 

D - Restoring Road Network

原文地址:http://www.cnblogs.com/a2985812043/p/7749296.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved