Pagini recente » Cod sursa (job #2539803) | Cod sursa (job #3143610) | Cod sursa (job #1865516) | Cod sursa (job #478653) | Cod sursa (job #6982)
Cod sursa(job #6982)
#include <stdio.h>
#include <string.h>
#define input "radiatie.in"
#define output "radiatie.out"
#define nmax 16002
#define infinit 1000000009
struct nod{int n,c; nod *urm;};
nod *c[nmax],*q,*prim;
long n,m,k,i,n1,n2,cost,cnt,mij,s,d,ls,ld;
int v[nmax];
long sol;
short fol[nmax];
inline long max(long a, long b)
{
return a>b?a:b;
}
void bfs(int nod)
{
int nn=1;
int nc=1;
while (nc<=nn)
{
q=c[v[nc]];
while (q)
{
if (q->c<=mij&&fol[q->n]==0)
{
nn++;
v[nn]=q->n;
fol[v[nn]]=1;
}
q=q->urm;
}
nc++;
}
}
int main()
{
FILE *fin,*fout;
fin=fopen(input,"r");
fout=fopen(output,"w");
fscanf(fin,"%ld %ld %ld",&n,&m,&k);
for (i=1;i<=m;i++)
{
fscanf(fin,"%ld %ld %ld",&n1,&n2,&cost);
q=new nod;
q->c=cost;
q->n=n2;
q->urm=c[n1];
c[n1]=q;
q=new nod;
q->c=cost;
q->n=n1;
q->urm=c[n2];
c[n2]=q;
}
for (i=1;i<=k;i++)
{
fscanf(fin,"%ld %ld",&s,&d);
sol=0;
ls=0;
ld=infinit;
while (ls<=ld)
{
mij=(ls+ld)/2;
memset(fol,0,sizeof(fol));
v[1]=s;
fol[s]=1;
bfs(s);
if (fol[d])
{
sol=mij;
ld=mij-1;
}
else ls=mij+1;
}
fprintf(fout,"%ld\n",sol);
}
fclose(fin);
fclose(fout);
return 0;
}