Pagini recente » Cod sursa (job #1512644) | Cod sursa (job #277494) | Cod sursa (job #2733899) | Cod sursa (job #928730) | Cod sursa (job #7240)
Cod sursa(job #7240)
#include <stdio.h>
#include <vector>
#include <map>
#include <queue>
#include <iostream>
#include <algorithm>
#define INF 2000000000
using namespace std;
struct node {
int nod;
int dist;
bool operator< (const node& right) const {
return dist < right.dist;
}
};
struct startN {
int nod;
int ap;
};
int n, m, k;
int nod1, nod2, cost;
vector<vector<int> > lV;
vector<map<int, int> > a;
vector<int> d;
int SRC;
node sursa, curr;
vector<int>::iterator start, end;
vector<pair<int, int> > queryz;
int rezz[15007];
void Dj();
int main()
{
FILE *fin = fopen("radiatie.in", "r");
fscanf(fin, "%d%d%d", &n, &m, &k);
int uu;
a.resize(n+6);
d.resize(n+6);
lV.resize(n+6);
queryz.resize(k+6);
for (int i = 1; i <= m; ++i)
{
fscanf(fin, "%d%d%d", &nod1, &nod2, &cost);
a[nod1][nod2] = cost;
a[nod2][nod1] = cost;
lV[nod1].push_back(nod2);
lV[nod2].push_back(nod1);
}
for (int i = 1; i <= k; ++i)
{
fscanf(fin, "%d%d", &nod1, &nod2);
if (nod1 > nod2)
swap(nod1, nod2);
queryz[i] = make_pair(nod1, nod2);
}
fclose(fin);
FILE *fout = fopen("radiatie.out", "w");
for (int i = 1; i <= k; ++i)
{
if (rezz[i] == 0)
{
SRC = queryz[i].first;
Dj();
for (int j = 1; j <= k; ++j)
{
if (rezz[j] == 0 && queryz[j].first == SRC)
rezz[j] = d[queryz[j].second];
if (rezz[j] == 0 && queryz[j].second == SRC)
rezz[j] = d[queryz[j].first];
}
}
}
for (int i = 1; i <= k; ++i)
fprintf(fout, "%d\n", rezz[i]);
fclose(fout);
return 0;
}
void Dj()
{
priority_queue<node> pq;
sursa.dist = 0;
sursa.nod = SRC;
d.assign(n+6, INF);
d[sursa.nod] = 0;
node aux;
pq.push(sursa);
while (!pq.empty())
{
curr = pq.top();
start = lV[curr.nod].begin();
end = lV[curr.nod].end();
pq.pop();
for (; start != end; ++start)
if (d[(*start)] > curr.dist)
{
if (a[curr.nod][(*start)] <= curr.dist)
d[(*start)] = curr.dist;
else
d[(*start)] = a[curr.nod][(*start)];
aux.nod = (*start);
aux.dist = d[(*start)];
pq.push(aux);
}
}
}