标签:abc blank led connect min ble strong sts with
原题地址:http://abc074.contest.atcoder.jp/tasks/arc083_b
Time limit : 2sec / Memory limit : 256MB
Score : 500 points
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:
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.
Input is given from Standard Input in the following format:
N A1,1 A1,2 … A1,N A2,1 A2,2 … A2,N … AN,1 AN,2 … AN,N
If there exists no network that satisfies the condition, print -1
. If it exists, print the shortest possible total length of the roads.
3 0 1 3 1 0 2 3 2 0
3
The network below satisfies the condition:
3 0 1 3 1 0 1 3 1 0
-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.
5 0 21 18 11 28 21 0 13 10 26 18 13 0 23 13 11 10 23 0 17 28 26 13 17 0
82
3 0 1000000000 1000000000 1000000000 0 1000000000 1000000000 1000000000 0
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; }
标签:abc blank led connect min ble strong sts with
原文地址:http://www.cnblogs.com/a2985812043/p/7749296.html