Pagini recente » Cod sursa (job #1951414) | Cod sursa (job #2956371) | Cod sursa (job #2371356) | Cod sursa (job #2359924) | Cod sursa (job #1782661)
#include <cstdio>
#include <queue>
#include <vector>
using namespace std;
struct XX
{
int lab,l,kalis;
};
struct XY
{
int nod1,lung1;
};
struct cmp
{
bool operator () (XX &a, XX &b)
{
return a.l>b.l;
}
};
bool pass[15001];
vector <int> v;
vector <XY> muchii[15001];
priority_queue < XX , vector <XX> , cmp > TY;
int main()
{
freopen("radiatie.in","r",stdin);
freopen("radiatie.out","w",stdout);
int n,m,k;
scanf("%d %d %d\n",&n,&m,&k);
for (int i=1;i<=m;i++)
{
int a,b,c;
scanf("%d %d %d\n",&a,&b,&c);
muchii[a].push_back({b,c});
muchii[b].push_back({a,c});
}
for (int i=1;i<=k;i++)
{
int a,b;
scanf("%d %d\n",&a,&b);
int nrx=muchii[a].size();
for (int j=0;j<nrx;j++)
{
int a1=muchii[a][j].nod1;
int a2=muchii[a][j].lung1;
TY.push({a1,a2,a2});
}
pass[a]=1;
v.push_back(a);
while (!TY.empty())
{
XX kaop=TY.top();
TY.pop();
pass[kaop.lab]=1;
v.push_back(kaop.lab);
if (kaop.lab==b)
{
printf("%d\n",kaop.kalis);
break;
}
nrx=muchii[kaop.lab].size();
for (int j=0;j<nrx;j++)
{
int nod=muchii[kaop.lab][j].nod1;
int lung=muchii[kaop.lab][j].lung1;
if (pass[nod]==0)
{
int kl=kaop.kalis;
if (lung>kl) kl=lung;
TY.push({nod,lung,kl});
}
}
}
while (!TY.empty()) TY.pop();
nrx=v.size();
for (int j=nrx-1;j>=0;j--)
{
pass[v[j]]=0;
v.pop_back();
}
}
}