Pagini recente » Cod sursa (job #2195695) | Cod sursa (job #2773163) | Cod sursa (job #621015) | Cod sursa (job #840692) | Cod sursa (job #916382)
Cod sursa(job #916382)
#include<cstdio>
#include<vector>
#include<utility>
#include<algorithm>
#define nmax 15001
using namespace std;
int n,m,x,y,z,cost,sum,dad[nmax],nr,k,i,up[nmax],T[nmax],niv[nmax],NIVEL(int);
vector<int>child[nmax];
vector <pair<int,pair<int,int> > >G;
int main()
{
int min,max;
vector<pair<int, pair<int,int> > >::iterator it;
vector<int>::iterator IT;
freopen("radiatie.in","r",stdin);
freopen("radiatie.out","w",stdout);
scanf("%d%d%d", &n, &m, &k);
for(i=1;i<=m;++i){scanf("%d%d%d", &x, &y, &z);G.push_back(make_pair(z,make_pair(x,y)));}
sort(G.begin(),G.end());
for(i=1;i<=n;++i)
{
dad[i]=i;
child[i].push_back(i);
}
for(it=G.begin();it!=G.end()&&nr!=n-1;it++)
{
pair<int, pair<int,int> > nod=*it;
if(dad[nod.second.first]!=dad[nod.second.second])
{
nr++;
if(dad[nod.second.first]<dad[nod.second.second])
{
up[nod.second.second]=nod.first;
T[nod.second.second]=nod.second.first;
min=dad[nod.second.first];
max=dad[nod.second.second];
}
else
{
min=dad[nod.second.second];
max=dad[nod.second.first];
}
for(IT=child[max].begin();IT!=child[max].end();IT++)
{
dad[*IT]=min;
child[min].push_back(*IT);
}
}
}
for(i=1;i<=n;++i)
if(!niv[i])
niv[i]=NIVEL(i);
for(;k;--k)
{
scanf("%d%d", &x, &y);
z=0;
for(;x!=y;)
{
if(niv[x]>niv[y])
{
z=z>up[x]?z:up[x];
x=T[x];
} else {
z=z>up[y]?z:up[y];
y=T[y];
}
}
printf("%d\n", z);
}
return 0;
}
int NIVEL(int nod)
{
if(T[nod]==0)return 1;
if(niv[nod])return niv[nod];
return 1+NIVEL(T[nod]);
}