Pagini recente » Borderou de evaluare (job #1051036) | Cod sursa (job #32767) | Cod sursa (job #500088) | Cod sursa (job #2507753) | Cod sursa (job #930606)
Cod sursa(job #930606)
#include<fstream>
#include<algorithm>
using namespace std;
int i,j,n,m,niv[15001],tata[15001],k,m1,m2,nr,max1,c[15001];
struct muchie
{
int x,y,cost;
};
muchie a[30001];
int aflanivel(int x)
{
if(tata[x]==x)
return 0;
aflanivel(tata[x]);
niv[x]=niv[tata[x]]+1;
}
bool cmp(muchie a,muchie b)
{
return a.cost<b.cost;
}
int det(int x)
{
while(x!=tata[x])
x=tata[x];
return x;
}
int main()
{
ifstream f("radiatie.in");
ofstream g("radiatie.out");
f>>n>>m>>k;
for(i=1;i<=m;++i)
f>>a[i].x>>a[i].y>>a[i].cost;
sort(a+1,a+m+1,cmp);
for(i=1;i<=n;++i)
tata[i]=i;
nr=0;
for(i=1;i<=m&&nr<n;++i)
{
m1=det(a[i].x);
m2=det(a[i].y);
if(m1!=m2)
{
tata[m1]=m2;
c[m1]=a[i].cost;
++nr;
}
}
for(i=1;i<=n;++i)
if(!niv[i])
aflanivel(i);
for(i=1;i<=k;++i)
{
f>>m1>>m2;
max1=0;
while(niv[m1]>niv[m2])
{
max1=max(max1,c[m1]);
m1=tata[m1];
}
while(niv[m2]>niv[m1])
{
max1=max(max1,c[m2]);
m2=tata[m2];
}
while(m1!=m2)
{
max1=max(max1,max(c[m1],c[m2]));
m1=tata[m1];
m2=tata[m2];
}
g<<max1<<"\n";
}
return 0;
}