Pagini recente » Cod sursa (job #2363501) | Cod sursa (job #2931171) | Cod sursa (job #1978024) | Cod sursa (job #901761) | Cod sursa (job #30492)
Cod sursa(job #30492)
#include<stdio.h>
#include<stdlib.h>
FILE *In=fopen("radiatie.in","r");
FILE *Out=fopen("radiatie.out","w");
int n,m,k;
int c[15001];
int d[15001];
int viz[15001];
int max[15001];
int i,j,ti,tj,t;
struct M{
int i,j,c;
}a[30001];
inline int sort(const void *a,const void*b)
{
return (((M*)a)->c-((M*)b)->c);
}
int find(int k)
{
while(c[k])
k=c[k];
return k;
}
int main()
{
fscanf(In,"%d%d%d",&n,&m,&k);
for(t=0;t<m;t++)
fscanf(In,"%d%d%d",&a[t].i,&a[t].j,&a[t].c);
qsort(a,m,sizeof(M),sort);
for(i=1,j=-1;i<n;i++)
{
for(ti=tj;ti==tj;j++,ti=find(a[j].i),tj=find(a[j].j));
c[tj]=ti,d[tj]=a[j].c;
}
for(t=1;t<=k;t++)
{
fscanf(In,"%d%d",&i,&j);
viz[i]=t,max[i]=0;
while(c[i])
{
if(d[i]>max[i]) max[c[i]]=d[i];
else max[c[i]]=max[i];
i=c[i]; viz[i]=t;
}
if(j!=i){
if(viz[j]==t)
fprintf(Out,"%d\n",max[j]);
else{
max[j]=0;
while(viz[c[j]]!=t)
{
if(d[j]>max[j]) max[c[j]]=d[j];
else max[c[j]]=max[j];
j=c[j];
}
if(d[j]>max[j]) max[j]=d[j];
if(max[c[j]]>max[j])
fprintf(Out,"%d\n",max[c[j]]);
else
fprintf(Out,"%d\n",max[j]);}}
else
fprintf(Out,"%d\n",max[i]);
}
fclose(Out);
return 0;
}