SPOJ——HIGHWAYS

Problem

A number of cities are connected by a network of highways. Each highway is bidirectional and connects two cities, with a given travel time. What is the shortest time to get from a given city to another given city?

Input

The first line of input contains the number of test cases.
Each test case starts with a line containing the number of cities n (2 ≤ n ≤ 100000), the number of highways m (1 ≤ m ≤ 100000), the starting city and the ending city. Cities are numbered from 1 to n.
Then m lines follow, each describing one highway. The description consists of the two distinct city numbers and the time in minutes to travel along the highway. The time will be between 1 and 1000.

Output

For each test case output a single line containing the minimum time it takes to get from the start to the destination. If no connection exists, output NONE.

Sample Input

2
4 2 1 4
1 2 5
3 4 5
4 4 1 4
1 2 5
2 3 5
3 4 5
4 2 6

Sample Output

NONE
11


思路

最短路模板题,dijkstra+priority_queue即可。不过注意使用priority_queue的时候加上greater参数,否则小根堆变大根堆,复杂度直接退化为O(n²),一开始几发TLE就是这个问题。

代码

#include
#include
#include
#include
#include
#include
#define N 100005
using namespace std;
typedef pair P;
struct edge {
    int to, cost;
    edge(int t, int c) :to(t), cost(c) {};
};
int V,E,start,endd;
vectorG[N];
int d[N];
void dijkstra(int s) {
    priority_queue,greater

>q; memset(d, 0x3f, sizeof(d)); d[s] = 0; q.push(P(0, s)); while (!q.empty()) { P p = q.top(); q.pop(); int v = p.second; if (d[v] < p.first)continue; for (size_t i = 0; i < G[v].size(); i++) { edge e = G[v][i]; if (d[e.to] > d[v] + e.cost) { d[e.to] = d[v] + e.cost; q.push(P(d[e.to], e.to)); } } } } int main() { ios::sync_with_stdio(false); cin.tie(0); int t; cin >> t; while (t--) { for (int i = 0; i < N; i++)G[i].clear(); int v1, v2, w; cin >> V >> E >> start >> endd; for (int i = 0; i < E; i++) { cin >> v1 >> v2 >> w; G[v1].push_back(edge(v2, w)); G[v2].push_back(edge(v1, w)); } dijkstra(start); if (d[endd] > 1000000)cout << "NONE" << endl; else cout << d[endd] << endl; } return 0; }

你可能感兴趣的:(SPOJ——HIGHWAYS)