Pagini recente » Cod sursa (job #632071) | Cod sursa (job #151404) | Cod sursa (job #1163899) | Cod sursa (job #2601589) | Cod sursa (job #2392636)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("radiatie.in");
ofstream fout ("radiatie.out");
const int nMax = 200010;
struct muchie {int x, y, c;};
int n, m, k, i, a, b;
int t[nMax], h[nMax], c[nMax];
muchie v[nMax];
inline bool cmp(muchie a, muchie b)
{
return a.c < b.c;
}
int getTata(int nod) {
if (t[nod] != t[t[nod]])
return getTata(t[nod]);
return t[nod];
}
void unite(int a, int b, int val)
{
a = getTata(a); b = getTata(b);
if(a == b) return;
if(h[a] < h[b])
{
t[a] = b;
c[a] = val;
}
else
{
if(h[a] == h[b])
++h[a];
t[b] = a;
c[b] = val;
}
}
int solve(int a, int b)
{
int ans = 0;
while(a != b)
{
if(h[a] < h[b])
{
ans = max(ans, c[a]);
a = t[a];
}
else
{
ans = max(ans, c[b]);
b = t[b];
}
}
return ans;
}
int main()
{
fin >> m >> n >> k;
for(i=1; i<=n; i++)
fin >> v[i].x >> v[i].y >> v[i].c;
for(i=1; i<=n; i++)
t[i] = i;
sort(v+1, v+n+1, cmp);
for(i=1; i<=n; i++)
unite(v[i].x, v[i].y, v[i].c);
while(k--)
{
fin >> a >> b;
fout << solve(a, b) << '\n';
}
return 0;
}