Pagini recente » Cod sursa (job #1770212) | Cod sursa (job #2036651) | Cod sursa (job #2504625) | Cod sursa (job #520649) | Cod sursa (job #7152)
Cod sursa(job #7152)
#include <stdio.h>
struct mch
{
long x,y,c;
mch* next;
}*ms=NULL;
//-------------------------
long m,n,k, *a,**mm,**cm;
//-------------------------
long parc(long s, long d)
{ //printf("parc(%ld,%ld)\n",s,d);
long i,q;
a[s]=1;
for(i=1; i<=mm[s][0]; i++)
if(mm[s][i]==d) return cm[s][i];
else if(a[mm[s][i]]==0)
{ q=parc(mm[s][i],d); if(q>0) return (q>=cm[s][i]?q:cm[s][i]); }
return 0;
}
//-------------------------
int main()
{
long i,j, x1,y1;
mch **p,*cr;
FILE *f=fopen("radiatie.in","rt");
fscanf(f,"%ld %ld %ld",&n,&m,&k);
a=new long[n+1];
for(i=0; i<m; i++)
{
cr=new mch;
fscanf(f,"%ld %ld %ld",&cr->x,&cr->y,&cr->c);
for(p=&ms; (*p)!=NULL; p=&((*p)->next))
if((*p)->c>cr->c) break;
cr->next=(*p);
*p=cr;
}
for(i=1; i<=n; i++) a[i]=0;
for(p=&ms; (*p)!=NULL; )
if(a[(*p)->x]==0 || a[(*p)->y]==0) {
a[(*p)->x]=a[(*p)->y]=1;
p=&((*p)->next); }
else *p=(*p)->next;
for(i=1; i<=n; i++) a[i]=0;
for(cr=ms; cr!=NULL; cr=cr->next)
{ a[cr->x]++; a[cr->y]++; }
mm=new long*[n+1];
cm=new long*[n+1];
for(i=1; i<=n; i++)
if(a[i]>0) {
mm[i]=new long[a[i]+1]; mm[i][0]=0;
cm[i]=new long[a[i]+1]; }
for(cr=ms; cr!=NULL; cr=cr->next)
{
mm[cr->x][++mm[cr->x][0]]=cr->y;
cm[cr->x][mm[cr->x][0]]=cr->c;
mm[cr->y][++mm[cr->y][0]]=cr->x;
cm[cr->y][mm[cr->y][0]]=cr->c;
}
FILE *fout=fopen("radiattie.out","wt");
for(i=0; i<k; i++)
{ //printf("------- drumul %ld\n",i);
fscanf(f,"%ld %ld",&x1,&y1);
for(j=1; j<=n; j++) a[j]=0;
fprintf(fout,"%ld\n",parc(x1,y1));
} //getchar(); getchar();
fclose(fout);
}