Pagini recente » Cod sursa (job #1746621) | Cod sursa (job #2002749) | Cod sursa (job #1573820) | Cod sursa (job #1298845) | Cod sursa (job #1319635)
#include <fstream>
#include <algorithm>
#define NMAX 15004
#define MMAX 30004
using namespace std;
ifstream cin("radiatie.in");
ofstream cout("radiatie.out");
struct nod{int nr,c;nod*urm;};
typedef nod*Lista;
Lista lis[NMAX];
struct elem{int x,y,c;} v[MMAX];
int n,m,k,comp[NMAX],H[NMAX],P[NMAX][6],que[NMAX],cst[NMAX],niv[NMAX],urm[NMAX];
void read();
void solve();
bool compare(elem a,elem b);
void APM();
void inserare(Lista&,int,int);
int minim(int,int);
void union_nod(int,int);
int find_nod(int);
void bfs();
int main()
{
read();
sort(v+1,v+m+1,compare);
APM();
bfs();
solve();
cin.close();cout.close();
return 0;
}
void inserare(Lista& prim,int nr,int c)
{
Lista aux;
aux=new nod;
aux->nr=nr;
aux->c=c;
aux->urm=prim;
prim=aux;
}
int find_nod(int x)
{
while (comp[x]>0)
x=comp[x];
return x;
}
void union_nod(int x,int y)
{
if (H[x]<H[y])
comp[x]=y;
else if (H[x]>H[y])
comp[y]=x;
else
{
comp[x]=y;
H[y]++;
}
}
void read()
{
int i;
cin>>n>>m>>k;
for (i=1;i<=m;i++)
cin>>v[i].x>>v[i].y>>v[i].c;
for (i=1;i<=n;i++)
{lis[i]=NULL;H[i]=1;}
}
bool compare(elem a,elem b)
{
return (a.c<b.c);
}
void APM()
{
int p=1,i,naux=n,a,b;
while (naux>1)
{
a=find_nod(v[p].x);
b=find_nod(v[p].y);
if (a!=b)
{
union_nod(a,b);
inserare(lis[v[p].x],v[p].y,v[p].c);
inserare(lis[v[p].y],v[p].x,v[p].c);
naux--;
}
p++;
}
}
void bfs()
{
int p=1,u=1;Lista aux;
que[p]=1;urm[1]=0;niv[1]=1;
while (p<=u)
{
aux=lis[que[p]];
while (aux!=NULL)
{
while (niv[aux->nr]==0)
{
niv[aux->nr]=niv[que[p]]+1;
urm[aux->nr]=que[p];
cst[aux->nr]=aux->c;
que[++u]=aux->nr;
}
aux=aux->urm;
}
p++;
}
}
void solve()
{
int i,x,y;
for (i=1;i<=k;i++)
{
cin>>x>>y;
cout<<minim(x,y)<<'\n';
}
}
int minim(int x,int y)
{
int i=x,j=y,sol=0;
while (niv[i]>niv[j])
{
if(cst[i]>sol) sol=cst[i];
i=urm[i];
}
while (niv[i]<niv[j])
{
if(cst[j]>sol) sol=cst[j];
j=urm[j];
}
while (i!=j)
{
if(cst[i]>sol) sol=cst[i];
if(cst[j]>sol) sol=cst[j];
i=urm[i];
j=urm[j];
}
return sol;
}