이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
//DavitMarg//
#include <iostream>
#include <algorithm>
#include <cmath>
#include <vector>
#include <string>
#include <cstring>
#include <map>
#include <set>
#include <queue>
#include <deque>
#include <stack>
#include <iterator>
#include <ctype.h>
#include <stdlib.h>
#define mod 1000000007ll
#define LL long long
#define LD long double
#define MP make_pair
#define PB push_back
using namespace std;
struct street
{
int to;
int d;
};
bool operator<(street a, street b)
{
return a.d > b.d;
}
int n,m,k,used[100005],d[100005];
vector<street> g[100005];
priority_queue<street> q;
int main()
{
cin >> n >> m;
for (int i = 0; i < m; i++)
{
int a, b,D;
street s;
cin >> a >> b >> D;
s.d = D;
s.to = b;
g[a].PB(s);
s.to = a;
g[b].PB(s);
}
for (int i = 1; i <= n; i++)
d[i] = mod;
cin >> k;
for (int i = 0; i < k; i++)
{
int a;
cin >> a;
d[a] = 0ll;
street s;
s.to = a;
s.d = d[a];
q.push(s);
}
for (int j = 1; j <= n; j++)
{
street v;
v.to = -1;
v.d = -1;
do
{
v = q.top();
q.pop();
} while (used[v.to]);
if (v.to == -1)
continue;
used[v.to] = 1;
for (int i = 0; i < (int)g[v.to].size(); i++)
{
street to = g[v.to][i];
if (d[to.to] > v.d + to.d)
{
d[to.to] = v.d + to.d;
street s;
s.d = d[to.to];
s.to = to.to;
q.push(s);
}
}
}
cin >> k;
for (int i = 0; i < k; i++)
{
int a, b;
cin >> a >> b;
cout << min(d[a], d[b]) << endl;
}
return 0;
}
/*
4 3
1 2 10
2 3 10
3 4 10
1
1
2
*/
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |