Pagini recente » Arhiva de probleme | Cod sursa (job #2590943) | Cod sursa (job #2034951) | Autentificare | Cod sursa (job #2156863)
#include <cstdio>
#include <vector>
#include <queue>
#include <algorithm>
#define N 15002
using namespace std;
int n,m,q,T[N];
struct muchie{
int x,y,c;
};
vector<muchie>M;
vector<pair<int,int>>G[N];
bool cmp(const muchie &a, const muchie &b)
{
return a.c < b.c;
}
int findT(int x)
{
while(x!=T[x])
x=T[x];
return x;
}
void Kruskal()
{
int sel=0;
for(int i=0; sel<n-1; i++)
{
int a=findT(M[i].x);
int b=findT(M[i].y);
if(a!=b)
{
T[a]=b;
sel++;
G[M[i].x].push_back({M[i].y,M[i].c});
G[M[i].y].push_back({M[i].x,M[i].c});
}
}
}
int Bfs(int x, int y)
{
int d[N]={0};
queue<int>Q;
d[x]=-1;
Q.push(x);
while(!d[y])
{
int pnod=Q.front();
Q.pop();
for(auto w:G[pnod])
{
if(!d[w.first])
{
d[w.first]=max(d[pnod],w.second);
Q.push(w.first);
}
}
}
return d[y];
}
int main()
{
freopen("radiatie.in", "r", stdin);
freopen("radiatie.out", "w", stdout);
muchie a;
scanf("%d%d%d", &n, &m, &q);
for(int i=1; i<=m; i++)
{
scanf("%d%d%d", &a.x, &a.y, &a.c);
M.push_back(a);
}
for(int i=1; i<=n; i++)
{
T[i]=i;
}
sort(M.begin(),M.end(),cmp);
Kruskal();
while(q)
{
int p1,p2,res;
scanf("%d%d", &p1, &p2);
res=Bfs(p1,p2);
printf("%d\n", res);
q--;
}
return 0;
}