Pagini recente » Cod sursa (job #2081926) | Cod sursa (job #2597526) | Cod sursa (job #3033478) | Cod sursa (job #2400224) | Cod sursa (job #329720)
Cod sursa(job #329720)
#include <fstream.h>
#define MaxN 109
#define MaxM 5000
#define Inf 1000009
long a[MaxN][MaxN],T;
int A[MaxN][MaxN],cmax[MaxN][MaxN],v[MaxN],ns,nf,Cmin=Inf,Cmax,n,m,o[MaxN],O[MaxN],k;
int minim(int a,int b)
{
if(a<b)
return a;
return b;
}
int maxim(int a,int b)
{
if(a>b)
return a;
return b;
}
void poz(int li,int ls)
{
int i=0,j=-1,c;
while(li<ls)
{
if(v[li]>v[ls])
{
O[o[li]]=ls; O[o[ls]]=li;
c=v[li]; v[li]=v[ls]; v[ls]=c;
c=o[li]; o[li]=o[ls]; o[ls]=c;
c=i;
i=-j;
j=-c;
}
li+=i;
ls+=j;
}
k=li;
}
void quick(int li,int ls)
{
if(li<ls)
{
poz(li,ls);
quick(li,k-1);
quick(k+1,ls);
}
}
void cit()
{
int i,x,y,z,j,min,max;
ifstream fin("coach.in");
fin>>n>>m>>T;
for(i=1;i<=n;i++)
{
fin>>v[i];
O[i]=o[i]=i;
}
quick(1,n);
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(i!=j)
a[i][j]=Inf;
for(i=1;i<=m;i++)
{
fin>>x>>y>>z;
a[O[x]][O[y]]=a[O[y]][O[x]]=z;
}
fin.close();
}
int start(int s)
{
int i,j,k,sw=0;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
A[i][j]=a[i][j];
for(k=s;k<=n;k++)
for(i=s;i<=n;i++)
for(j=s;j<=n;j++)
{
if(A[i][j]>A[i][k]+A[k][j])
A[i][j]=A[i][k]+A[k][j];
if(A[i][j]<T)
sw=1;
if(A[i][j]==T)
{
ns=o[i]; nf=o[j]; Cmin=minim(v[s],v[k]); Cmax=maxim(v[k],v[s]);
}
}
return sw;
}
void sol()
{
int i;
for(i=1;i<n;i++)
if(start(i)!=1)
break;
}
void afis()
{
ofstream fout("coach.out");
fout<<ns<<" "<<nf<<" "<<Cmin<<" "<<Cmax;
fout.close();
}
int main()
{
cit();
sol();
afis();
return 0;
}