Pagini recente » Cod sursa (job #1960743) | Cod sursa (job #925145) | Cod sursa (job #2963071) | Cod sursa (job #2435009) | Cod sursa (job #2267943)
#include <fstream>
using namespace std;
ifstream f("pscnv.in");
ofstream g("pscnv.out");
struct
{
int nod,poz_urm;
short cost;
}v[750002];
int t,n,m,x,y,q[750002];
void adarc(int a,int b,int c)
{
int ultim_poz[250002],crt;
bool ok;
if(v[a].poz_urm==0){v[a].poz_urm=t;v[t].nod=b;v[t].cost=c;ultim_poz[a]=t;t++;}
else
{
ok=0;
crt=v[a].poz_urm;
while(crt!=0)
{
if(v[a].nod==b && v[a].cost>c){v[a].cost=c;ok=1;break;}
crt=v[crt].poz_urm;
}
if(ok==0)
{
v[ultim_poz[a]].poz_urm=t;
v[t].nod=b;
v[t].cost=c;
ultim_poz[a]=t;t++;
}
}
}
int parcurgere(int k)
{ int prim,ultim,crt;
bool vizitat[250002];
for(int i=1;i<=n;i++)vizitat[i]=0;
prim=ultim=1;
q[prim]=x;
vizitat[x]=1;
while(prim<=ultim)
{
crt=v[q[prim]].poz_urm;
while(crt!=0)
{
if(vizitat[v[crt].nod]==0 && v[crt].cost<=k)
{
vizitat[v[crt].nod]=1;if(v[crt].nod==y)return 1;
ultim++;
q[ultim]=v[crt].nod;
}
crt=v[crt].poz_urm;
}
prim++;
}
return 0;
}
int main()
{f>>n>>m>>x>>y;
int i,a,b,c,kmin,st,dr,mij;
for(t=1;t<=n;t++)
v[t].nod=t;
for(i=1;i<=m;i++)
{
f>>a>>b>>c;
adarc(a,b,c);
}
st=1;
dr=1000;
while(st<=dr)
{
mij=(st+dr)/2;
if(parcurgere(mij)){kmin=mij;dr=mij-1;}
else st=mij+1;
}
g<<kmin;
//for(i=1;i<=n+m;i++)
// g<<v[i].nod<<" "<<v[i].poz_urm<<" "<<v[i].cost<<'\n';
return 0;
}