Submission #90406

#TimeUsernameProblemLanguageResultExecution timeMemory
90406davitmargEvacuation plan (IZhO18_plan)C++17
0 / 100
404 ms10416 KiB
//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;

bool operator<(pair<int, int> a, pair<int, int> b)
{
	return a.second > b.second;
}

int n,m,k,used[100005],d[100005];
vector<pair<int, int>> g[100005];
priority_queue<pair<int, int>> q;
int main()
{
	cin >> n >> m;
	for (int i = 0; i < m; i++)
	{
		int a, b,D;
		pair<int, int> s;
		cin >> a >> b >> D;
		s.second = D;
		s.first = b;
		g[a].PB(s);
		s.first = 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;
		pair<int, int> s;
		s.first = a;
		s.second = d[a];
		q.push(s);
	}


	for (int j = 1; j <= n; j++)
	{
		pair<int, int> v;
		v.second = -1;
		v.first = -1;
		do
		{
			v = q.top();
			q.pop();
		} while (used[v.first] && !q.empty());

		if (v.first == -1 || used[v.first])
			continue;
		used[v.first] = 1;
		for (int i = 0; i < (int)g[v.first].size(); i++)
		{
			pair<int, int> to = g[v.first][i];
			if (d[to.first] > v.second + to.second)
			{
				d[to.first] = v.second + to.second;
				pair<int, int> s;
				s.second = d[to.first];
				s.first = to.first;
				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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...