Pagini recente » Istoria paginii utilizator/elevulxxx | Cod sursa (job #1784175) | Cod sursa (job #1737849) | Cod sursa (job #1856342) | Cod sursa (job #379250)
Cod sursa(job #379250)
#include <fstream>
#include <vector>
using namespace std;
#define MAX_N 250005
#define MAX_K 1005
#define INF 0x3f3f3f3f
#define nod first
#define val second
#define foreach(V) for(typeof (V).begin() it = (V).begin(); it != (V).end(); ++it)
ifstream fin ("pscnv.in");
ofstream fout ("pscnv.out");
int N, M, S, F;
vector <pair<int, int> > G[MAX_N];
vector <int> Dst[MAX_K];
void citire()
{
fin >> N >> M >> S >> F;
for(int i = 1; i <= M; ++i)
{
int x, y, c;
fin >> x >> y >> c;
G[x].push_back(make_pair(y, c));
}
}
void solve()
{
int D[MAX_N];
memset(D, INF, sizeof D);
D[S] = 0;
Dst[0].push_back(S);
for(int i = 0; i <= 1000; ++i)
for(int k = 0; k < (int)Dst[i].size(); ++k)
{
int j = Dst[i][k];
if(D[j] == i)
foreach(G[j])
if(D[it -> nod] > max(i, it -> val))
{
Dst[max(i, it -> val)].push_back(it -> nod);
D[it -> nod] = max(i, it -> val);
}
}
fout << D[F];
}
int main()
{
citire();
solve();
}