Pagini recente » Cod sursa (job #1729978) | Cod sursa (job #2422203) | Cod sursa (job #2422149) | Cod sursa (job #953264) | Cod sursa (job #2148662)
#include <fstream>
#include <algorithm>
#include <vector>
#include <cstring>
using namespace std;
ifstream f ("radiatie.in");
ofstream g ("radiatie.out");
const int nmax=3e4+3;
vector <int> v[nmax];
vector <int> c[nmax];
int n,m,k,a,b,sol,GR[nmax],act,lvl[nmax],cost[nmax],boss[nmax];
struct usu
{
int a,b,c;
}mu[nmax];
void root(int nod)
{
for(int i=0;i<v[nod].size();++i)
{
if(lvl[v[nod][i]]) continue;
lvl[v[nod][i]]=lvl[nod]+1;
boss[v[nod][i]]=nod;
cost[v[nod][i]]=c[nod][i];
root(v[nod][i]);
}
}
void dfs(int a,int b)
{
while(a!=b)
{
if(lvl[a]>lvl[b])
{
sol=max(sol,cost[a]);
a=boss[a];
}
else
{
sol=max(sol,cost[b]);
b=boss[b];
}
}
}
inline bool cmp(const usu &t1,const usu &t2)
{
return t1.c<t2.c;
}
inline int gr(int nod)
{
if(GR[nod]==nod) return nod;
GR[nod]=gr(GR[nod]);
return GR[nod];
}
int main()
{
f>>n>>m>>k;
for(int i=1;i<=m;++i) f>>mu[i].a>>mu[i].b>>mu[i].c;
sort(mu+1,mu+m+1,cmp);
for(int i=1;i<=n;++i) GR[i]=i;
for(int i=1;i<=m&&act<n-1;++i)
{
if(gr(mu[i].a)!=gr(mu[i].b))
{
++act;
v[mu[i].a].push_back(mu[i].b);
c[mu[i].a].push_back(mu[i].c);
v[mu[i].b].push_back(mu[i].a);
c[mu[i].b].push_back(mu[i].c);
GR[gr(mu[i].a)]=gr(mu[i].b);
}
}
boss[1]=0;
lvl[1]=1;
root(1);
while(k--)
{
f>>a>>b;
sol=0;
dfs(a,b);
g<<sol<<'\n';
}
return 0;
}