Pagini recente » Cod sursa (job #1531028) | Cod sursa (job #2076377) | Cod sursa (job #695921) | Cod sursa (job #2532458) | Cod sursa (job #2769645)
#include <bits/stdc++.h>
#define DIM 30005
#define NMAX 15005
using namespace std;
ifstream f("radiatie.in");
ofstream g("radiatie.out");
struct elem
{
int x, y, cost;
bool operator<(const elem& a) const
{
return cost < a.cost;
}
}edges[DIM];
int n, m, q, t[NMAX], cost[NMAX] ,r[NMAX];
int radacina(int a)
{
if(a == t[a])
return a;
return radacina(t[a]);
}
void leaga(int a, int b, int c)
{
if(r[a] < r[b])
swap(a, b);
t[b] = a;
cost[b] = c;
if(r[a] == r[b])
r[a]++;
}
void kruskal()
{
sort(edges + 1, edges + 1 + m);
for(int i = 1; i <= n; i++)
t[i] = i;
for(int i = 1; i <= m; i++)
{
int radx = radacina(edges[i].x);
int rady = radacina(edges[i].y);
if(radx != rady)
leaga(radx, rady, edges[i].cost);
}
}
int lca(int a, int b)
{
int maxi = 0;
while(a != b)
{
if(r[a] > r[b])
{
maxi = max(maxi, cost[b]);
b = t[b];
}
else
{
maxi = max(maxi, cost[a]);
a = t[a];
}
}
return maxi;
}
int main()
{
f >> n >> m >> q;
for(int i = 1; i <= m; i++)
f >> edges[i].x >> edges[i].y >> edges[i].cost;
kruskal();
for(int i = 1; i <= q; i++)
{
int x, y;
f >> x >> y;
g << lca(x, y) << "\n";
}
return 0;
}