Pagini recente » Cod sursa (job #589503) | Cod sursa (job #3204612) | Cod sursa (job #1909813) | Cod sursa (job #395445) | Cod sursa (job #2147458)
#include <fstream>
#include <algorithm>
#define nmax 15005
using namespace std;
ifstream f("radiatie.in");
ofstream g("radiatie.out");
struct muchie {int x,y,c;}v[nmax];
int t[nmax],viz[nmax],i,cost[nmax],h[nmax],n,m,k,j,k1,r1,r2,a,b;
int comp (muchie a,muchie b)
{
return a.c<b.c;
}
int radacina(int a)
{
while(a!=t[a])
a=t[a];
return a;
}
int lca(int a,int b)
{
int aux=a,ct=0;
while(a!=t[a])
{
viz[a]=i;
a=t[a];
}
while(b!=t[b]&&viz[b]!=i)
{
ct=max(ct,cost[b]);
b=t[b];
}
while(aux!=b)
{
viz[aux]=i;
ct=max(ct,cost[aux]);
aux=t[aux];
}
return ct;
}
int main()
{
f>>n>>m>>k;
for(i=1;i<=m;i++)
f>>v[i].x>>v[i].y>>v[i].c;
sort(v+1,v+n+1,comp);
j=1;k1=0;
for(i=1;i<=n;i++) t[i]=i;
while(k1<n)
{
a=v[j].x;b=v[j].y;
r1=radacina(a);
r2=radacina(b);
if(r1!=r2) {
k1++;
if(h[r1]>h[r2]) {t[b]=a;cost[b]=v[j].c;}
else {t[a]=b;cost[a]=v[j].c;}
if(h[r1]==h[r2]) h[b]++;}
j++;
}
for(i=1;i<=k;i++)
{
f>>a>>b;
g<<lca(a,b)<<'\n';
}
return 0;
}