Pagini recente » Cod sursa (job #210302) | Cod sursa (job #2357766) | Cod sursa (job #472590) | Cod sursa (job #956789) | Cod sursa (job #6874)
Cod sursa(job #6874)
#include<stdio.h>
#include<set>
#include<algorithm>
#include<iterator>
using namespace std;
#define in "radiatie.in"
#define out "radiatie.out"
#define dim 15001
#define inf 1000000001
int d[dim], x[dim], y[dim];
typedef struct nod {
int vf, cost;
nod* next;
} *PNOD;
PNOD graph[dim];
struct Comp {
bool operator () ( int i, int j ) const {
return d[i] < d[j];
}
};
multiset<int, Comp> q;
bool sel[dim];
int n, m, k;
void ReadData();
int Dijkstra(int,int);
void Add(int,int,int);
int Maxim(int,int);
int main()
{
ReadData();
return 0;
}
void ReadData()
{
int k1, k2, k3;
freopen(in,"r",stdin);
freopen(out,"w",stdout);
scanf("%d%d%d",&n,&m,&k);
for ( int i = 1; i <= m; ++i )
{
scanf("%d%d%d", &k1,&k2,&k3);
Add(k1,k2,k3);
Add(k2,k1,k3);
}
for ( int i = 1; i <= k; ++i )
{
scanf("%d%d",&k1,&k2);
printf("%d\n", Dijkstra(k1,k2));
}
}
void Add(int i, int j, int k)
{
PNOD w = new nod;
w->vf = i;
w->cost = k;
w->next = graph[j];
graph[j] = w;
}
int Maxim(int a,int b)
{
return a > b ? a : b;
}
int Dijkstra(int sursa, int dest)
{
for ( int i = 1; i <= n; i++ )
{
d[i] = inf;
sel[i] = false;
}
q.clear();
q.insert(sursa);
d[sursa] = 0;
sel[sursa] = true;
while ( !q.empty() )
{
int poz = *q.begin();
q.erase( q.begin() );
sel[poz] = 0;
for ( PNOD w = graph[poz]; w; w=w->next )
{
if (d[w->vf] > Maxim(d[poz],w->cost) )
{
if ( sel[w->vf] ) q.erase(w->vf);
else sel[w->vf] = true;
d[w->vf] = Maxim(d[poz],w->cost);
q.insert(w->vf);
}
}
}
return d[dest];
}