Pagini recente » Cod sursa (job #883196) | Cod sursa (job #396772) | Cod sursa (job #629934) | Cod sursa (job #1150033) | Cod sursa (job #2674702)
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream cin ("radiatie.in");
ofstream cout ("radiatie.out");
struct ura{
int x, y, c;
};
vector <int> lista[15005];
ura muchii[30005];
int cnt[15005];
int set[15005];
int S(int x)
{
while (set[x])
x = set[x];
return x;
}
int cost[15005];
bool cmp(ura a, ura b)
{
return a.c < b.c;
}
int lvl[15005];
void dfs(int nod)
{
for (int i = 0; i < lista[nod].size(); i++)
{
int x = lista[nod][i];
lvl[x] = lvl[nod] + 1;
dfs(x);
}
}
int main()
{
int n, m, i, k;
cin >> n >> m >> k;
for (i = 1; i <= m; i++)
{
int x, y, c;
cin >> muchii[i].x;
cin >> muchii[i].y;
cin >> muchii[i].c;
}
sort (muchii + 1, muchii + m + 1, cmp);
for (i = 1; i <= m; i++)
{
int x = muchii[i].x;
int y = muchii[i].y;
int c = muchii[i].c;
int xx = S(x);
int yy = S(y);
if (xx != yy)
{
set[xx] = yy;
lista[yy].push_back(xx);
cost[xx] = c;
}
}
for (i = 1; i <= n; i++)
if (!set[i])
dfs(i);
for (i = 1; i <= k; i++)
{
int x, y;
cin >> x >> y;
int maxi = 0;
while(lvl[x] > lvl[y])
{
maxi = max(maxi, cost[x]);
x = set[x];
}
while(lvl[y] > lvl[x])
{
maxi = max(maxi, cost[y]);
y = set[y];
}
while(x != y)
{
maxi = max(maxi, max(cost[x], cost[y]));
x = set[x];
y = set[y];
}
cout << maxi << '\n';
}
return 0;
}