Pagini recente » Cod sursa (job #1656729) | Cod sursa (job #2657151) | fmi-no-stress-10 | Cod sursa (job #2852769) | Cod sursa (job #2268596)
#include <fstream>
using namespace std;
ifstream f("pscnv.in");
ofstream g("pscnv.out");
struct
{
unsigned nod,poz_urm;
unsigned cost;
} v[750002];
unsigned t,n,m,x,y,q[750002];
void adarc(unsigned a,unsigned b,unsigned c)
{
unsigned 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[crt].nod==b && v[crt].cost>c)
{
v[crt].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(unsigned k)
{
unsigned prim,ultim,crt;
bool vizitat[250002];
for(unsigned i=1; i<=n; i++)vizitat[i]=0;
prim=1;
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;
unsigned 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;
if(a!=b)adarc(a,b,c);
}
st=1;
dr=1000;
while(st<=dr)
{
mij=(st+dr)/2;
if(parcurgere(mij)==1)
{
kmin=mij;
dr=mij-1;
}
else st=mij+1;
}
g<<kmin<<'\n';
return 0;
}