Pagini recente » Cod sursa (job #176326) | Cod sursa (job #103860) | Cod sursa (job #1150868) | Arhiva de probleme | Cod sursa (job #1112731)
#include<stdio.h>
#include<string.h>
#include<vector>
using namespace std;
const int KMAX = 1000, NMAX = 25e4, INF = 2e9;
struct EDGE {
int node, k;
EDGE (int node = 0, int k = 0) {
this->node = node;
this->k = k;
}
};
vector <EDGE> graph[NMAX + 5];
vector <EDGE>::iterator itEdge;
vector <int>::iterator itInt;
vector <int> cost[NMAX + 5];
int n, m, start, fin, dmin[NMAX + 5];
void read() {
char ln[20];
int i, len, x, y, k;
scanf("%d%d%d%d\n",&n,&m,&start,&fin);
for(i = 1; i <= m; i++) {
gets(ln);
sscanf(ln,"%d%d%d",&x,&y,&k);
graph[x].push_back(EDGE(y,k));
}
}
void dijkstra () {
int c, node;
for(node = 1; node <= n; node++)
dmin[node] = INF;
cost[0].push_back(start);
dmin[start] = 0;
for(c = 0; c <= 1000; c++) {
for(node = 0; node < cost[c].size(); ++node) {
if(c > dmin[cost[c][node]])
continue;
for(itEdge = graph[cost[c][node]].begin(); itEdge != graph[cost[c][node]].end(); itEdge++)
if(max(itEdge->k, dmin[cost[c][node]]) < dmin[itEdge->node]) {
dmin[itEdge->node] = max(itEdge->k, dmin[cost[c][node]]);
cost[max(itEdge->k, dmin[cost[c][node]])].push_back(itEdge->node);
}
cost[c].clear();
}
}
}
int main() {
freopen("pscnv.in","r",stdin);
freopen("pscnv.out","w",stdout);
read();
dijkstra();
printf("%d",dmin[fin]);
return 0;
}