Pagini recente » Cod sursa (job #340281) | Cod sursa (job #2559870) | Cod sursa (job #478008) | Cod sursa (job #1098661) | Cod sursa (job #928685)
Cod sursa(job #928685)
#include<fstream>
#include<vector>
#include<algorithm>
using namespace std;
int i,j,n,m,niv[15001],tata[15001],k,m1,m2,d[15001],b[15001];
unsigned long max1,c[15001],cost1;
bool viz[15001];
struct muchii
{
int x,y;
unsigned long cost;
};
muchii a[30001];
struct arbore
{
int nod;
unsigned long cc;
};
vector<arbore> v[15001];
void df(int x)
{
int i;
viz[x]=1;
for(i=0;i<v[x].size();++i)
if(!viz[v[x][i].nod])
{
tata[v[x][i].nod]=x;
niv[v[x][i].nod]=niv[x]+1;
c[v[x][i].nod]=v[x][i].cc;
df(v[x][i].nod);
}
}
bool cmp(muchii a,muchii b)
{
return a.cost<b.cost;
}
int componenta(int x)
{
int r=x,aux;
while(r!=d[r])
r=d[r];
while(x!=d[x])
{
aux=d[x];
d[x]=r;
x=aux;
}
return r;
}
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)
d[i]=i;
int nr=0;
for(i=1;i<=m&&nr<n;++i)
{
m1=componenta(a[i].x);
m2=componenta(a[i].y);
if(m1!=m2)
{
b[++nr]=i;
d[m2]=m1;
}
}
for(i=1;i<n;++i)
{
m1=a[b[i]].x;
m2=a[b[i]].y;
cost1=a[b[i]].cost;
v[m1].push_back((arbore) {m2,cost1});
v[m2].push_back((arbore) {m1,cost1});
}
df(1);
for(i=1;i<=k;++i)
{
f>>m1>>m2;
max1=0;
while(niv[m1]>niv[m2])
{
max1=max(c[m1],max1);
m1=tata[m1];
}
while(niv[m2]>niv[m1])
{
max1=max(c[m2],max1);
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;
}