Pagini recente » Cod sursa (job #2007766) | Cod sursa (job #596918) | Cod sursa (job #1353) | Monitorul de evaluare | Cod sursa (job #1344)
Cod sursa(job #1344)
#include <cstdio>
#include <vector>
using namespace std;
const int MAXN = 250001;
int N, M, d[MAXN], S, D;
vector<int> cst[1001];
vector< pair<int, int> > con[MAXN];
int main()
{
freopen("pscnv.in", "rt", stdin);
freopen("pscnv.out", "wt", stdout);
int i, j, k;
char s[32], *p;
for (scanf("%d %d %d %d ", &N, &M, &S, &D); M; M--)
{
fgets(s, 32, stdin);
for (i = 0, p = s; '0' <= *p && *p <= '9'; p++)
i = i * 10 + *p - '0';
for (j = 0, p++; '0' <= *p && *p <= '9'; p++)
j = j * 10 + *p - '0';
for (k = 0, p++; '0' <= *p && *p <= '9'; p++)
k = k * 10 + *p - '0';
con[i].push_back( make_pair(j, k) );
}
memset(d, 0x3f, sizeof(d));
d[S] = 0;
cst[0].push_back(S);
vector< pair<int, int> > :: iterator it;
for (i = 0; i <= 1000; i++)
for (j = 0; j < (int)cst[i].size(); j++)
{
k = cst[i][j];
if (d[k] != i) continue;
for (it = con[k].begin(); it != con[k].end(); it++)
if ((*it).second > i)
if ((*it).second < d[(*it).first])
cst[(*it).second].push_back((*it).first),
d[(*it).first] = (*it).second;
else;
else
if (i < d[(*it).first])
cst[i].push_back((*it).first),
d[(*it).first] = i;
}
printf("%d\n", d[D]);
return 0;
}