Pagini recente » Cod sursa (job #75469) | Cod sursa (job #646739) | Cod sursa (job #2444946) | Monitorul de evaluare | Cod sursa (job #2269814)
#include <fstream>
using namespace std;
ifstream f("pscnv.in");
ofstream g("pscnv.out");
int n,v[250001],m,start,finish,a[2][750001],st,dr,kmax=-1,kmin=100000,mid,lastmid,c[250001];
int main()
{
f>>n>>m>>start>>finish;
int curent=n+1;
for(int i=1; i<=m; i++)
{
int x,y;
f>>x>>y>>a[2][curent];
if(kmax<a[2][curent]) kmax=a[2][curent];
if(kmin>a[2][curent]) kmin=a[2][curent];
if(v[x]==0)
v[x]=x;
if(v[y]==0)
v[y]=y;
a[1][v[x]]=curent;
v[x]=curent;
a[0][curent]=y;
curent++;
}
for(int i=1; i<=n; i++)
a[0][i]=i;
bool conex=0;
bool afisare=0;
st=kmin;
dr=kmax;
while(st<=dr && afisare==0)
{
conex=0;
mid=st+(dr-st)/2;
int u=1;
int p=1;
c[p]=start;
while(u>=p)
{
int l=c[p];
l=a[1][l];
while(l!=0)
{
if(mid>=a[2][l])
{
c[++u]=a[0][l];
if(a[0][l]==finish)
{
conex=1;
lastmid=mid;
}
}
l=a[1][l];
}
p++;
}
if(conex==1)
{
bool conex1=0;
u=1;
p=1;
c[p]=start;
while(u>=p)
{
int l=c[p];
l=a[1][l];
while(l!=0)
{
if(mid-1>=a[2][l])
{
c[++u]=a[0][l];
if(a[0][l]==finish)
{
conex1=1;
lastmid=mid;
}
}
l=a[1][l];
}
p++;
}
if(conex1==0)
{
g<<lastmid;
afisare++;
}
else mid--;
}
if(conex==1) dr=mid;
else st=mid+1;
}
return 0;
}