1. 程式人生 > >HDU 6343(三角形不等式)

HDU 6343(三角形不等式)

Problem L. Graph Theory Homework

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)
Total Submission(s): 272    Accepted Submission(s): 154


 

Problem Description

There is a complete graph containing n vertices, the weight of the i-th vertex is wi.
The length of edge between vertex i and j (i≠j) is ⌊|wi−wj|−−−−−−−√⌋.
Calculate the length of the shortest path from 1 to n.

Input

The first line of the input contains an integer T (1≤T≤10) denoting the number of test cases.
Each test case starts with an integer n (1≤n≤105) denoting the number of vertices in the graph.
The second line contains n integers, the i-th integer denotes wi (1≤wi≤105).

Output

For each test case, print an integer denoting the length of the shortest path from 1 to n.

Sample Input

1 3 1 3 5

Sample Output

2

Source

考慮1->n 和1->i i->n兩種走法的和

分別為\sqrt{\left | w_{1}-w_{n} \right |} 和\sqrt{\left | w_{1}-w_{i} \right |}+\sqrt{\left | w_{i}-w_{n} \right |}

根據三角形不等式,前者顯然小於等於後者

所以直接從1到n就是最短路了

#include<bits/stdc++.h>
#define mp make_pair
#define fir first
#define se second
#define ll long long
#define pb push_back
using namespace std;
const int maxn=2e5+10;
const ll mod=1e9+7;
const int maxm=1e6+10;
const double eps=1e-7;
const int inf=0x3f3f3f3f;
const double pi = acos(-1.0);
int n;
int w[maxn];

int main(){
    int t;
    scanf("%d",&t);
    while (t--){
        scanf("%d",&n);
        for (int i=1;i<=n;i++){
            scanf("%d",&w[i]);
        }
        printf("%d\n",(int)sqrt(abs(w[1]-w[n])));
    }
    return 0;
}