Pagini recente » Cod sursa (job #2125286) | Cod sursa (job #388458) | Cod sursa (job #1344827) | Cod sursa (job #16507) | Cod sursa (job #1106617)
#include <cstdio>
#include <cstring>
#include <vector>
#include <queue>
#include <algorithm>
#include <cctype>
#define SIZE 250005
#define SIZE_list 1005
#define cost first
#define node2 second
#define MX 1<<13
using namespace std;
int n, m, pos, source, sink, min_cost, dist[SIZE];
vector < pair < int, int > > adj[SIZE];
vector <int> lst[SIZE_list];
char buffer[MX];
inline void read();
inline void solve();
inline void write();
int main()
{
read();
solve();
write();
return 0;
}
inline int get_no()
{
int number = 0;
while( !isdigit( buffer[ pos ] ))
{
++pos;
if( pos >= MX )
{
fread( buffer, sizeof( char ), MX, stdin);
pos = 0;
}
}
while ( isdigit( buffer[ pos ] ) )
{
number = number * 10 + buffer[ pos ] - 48;
++pos;
if( pos >= MX )
{
fread( buffer, sizeof( char ), MX, stdin);
pos = 0;
}
}
return number;
}
inline void read()
{
freopen("pscnv.in", "r", stdin);
fread(buffer, sizeof( char ), MX, stdin);
n = get_no();
m = get_no();
source = get_no();
sink = get_no();
int x, y, cost;
while ( m-- )
{
x = get_no();
y = get_no();
cost = get_no();
adj[x].push_back( make_pair( cost, y ) );
}
}
inline void solve()
{
memset( dist, 0x3f, sizeof(dist) );
lst[ 0 ].push_back( source );
dist[ source ] = 0;
for(int cst = 0; cst <= 1000; ++cst)
{
min_cost = cst;
for(unsigned it = 0; it < lst[cst].size(); ++it)
{
int node = lst[cst][it];
if( node == sink )
return ;
for(vector < pair < int, int > > :: iterator it = adj[ node ].begin(); it != adj[ node ].end(); ++it)
{
int cost_tmp = max( min_cost, (*it).cost );
// printf("%d ", cost_tmp);
if( dist[ (*it).node2 ] > cost_tmp )
{
dist[ (*it).node2 ] = cost_tmp;
lst[ cost_tmp ].push_back( (*it).node2 );
}
}
}
}
}
inline void write()
{
freopen("pscnv.out", "w", stdout);
printf("%d\n", min_cost);
}