Pagini recente » Cod sursa (job #725177) | Cod sursa (job #3188173) | Cod sursa (job #2333550) | Cod sursa (job #376859) | Cod sursa (job #2755055)
#include <bits/stdc++.h>
#define N 100005
#define f first
#define s second
#define INF 0x3F3F3F3F
using namespace std;
ifstream fin ("pscnv.in");
ofstream fout ("pscnv.out");
vector< pair<int,int> > l[N];
vector< pair<int,int> > g[N];
int n,m,p,q,x,y,z,k;
int v[N],st[N],d[N],viz[N],dp[N];
int vmin[N],vmini[N];
queue<int> qc;
void Citire()
{
fin>>n>>m>>p>>q;
for(int i=1;i<=m;++i)
{
fin>>x>>y>>z;
g[x].push_back(make_pair(y,z));
l[y].push_back(make_pair(x,z));
}
}
void DFS(int x)
{
viz[x]=1;
for(int i=0;i<g[x].size();i++)
if(viz[g[x][i].f]==0)
DFS(g[x][i].f);
st[k--]=x;
}
void SortTop()
{
k=n;
for(int i=1;i<=n;++i)
if(viz[i]==0)
DFS(i);
}
void Solve()
{
for(int i=1;i<=n;++i)
{
int x=st[i];
int minim=INF;
if(l[x].size()==0)vmin[x]=0;
else
{
for(int j=0;j<l[x].size();j++)
{
int nod=l[x][j].f;
int dist=l[x][j].s;
if(max(vmin[nod],dist)<minim)
minim=max(vmin[nod],dist);
}
vmin[x]=minim;
}
}
}
void Dijkstra()
{
for(int i=1;i<=n;++i)
vmini[i]=INF;
vmini[p]=0;
d[p]=0;v[p]=1;
qc.push(p);
while(!qc.empty())
{
int x=qc.front();
qc.pop();
v[x]=0;
for(int i=0;i<g[x].size();i++)
{
int nod=g[x][i].f;
int dist=g[x][i].s;
if(vmini[nod]>max(vmini[x],dist))
vmini[nod]=max(vmini[x],dist);
if(v[nod]==0)
{
qc.push(nod);
v[nod]=1;
}
}
}
}
int main()
{
Citire();
SortTop();
Dijkstra();
fout<<vmini[q];
return 0;
}