Pagini recente » Cod sursa (job #999698) | Cod sursa (job #1734248) | Cod sursa (job #1282229) | Cod sursa (job #879167) | Cod sursa (job #1142690)
using namespace std;
#include<cstdio>
#include<vector>
#include<utility>
#include<map>
#include<cstring>
#include<queue>
const int MAXN=300000;
map<pair<int,int>,int> mp;
vector<pair<int,int> > v[MAXN];
bool ok[MAXN];
int main(){
freopen("pscnv.in","r",stdin);
freopen("pscnv.out","w",stdout);
int n,m,x,y;
scanf("%d%d%d%d",&n,&m,&x,&y);
for(int i=1;i<=m;i++){
pair<int,int> pr;
int ps;
scanf("%d%d%d",&pr.first,&pr.second,&ps);
if(pr.first==pr.second){
continue;
}
if(mp.find(pr)==mp.end()){
mp[pr]=ps;
}else{
mp[pr]=min(ps,mp[pr]);
}
}
for(map<pair<int,int>,int>::iterator it=mp.begin();it!=mp.end();it++){
int x1,y1,cs;
x1=it->first.first;
y1=it->first.second;
cs=it->second;
v[x1].push_back(make_pair(y1,cs));
}
int lf=0,rt=2000;
while(lf<rt){
int mid=(lf+rt)/2;
memset(ok,0,sizeof(ok));
queue<int> q;
ok[x]=1;
q.push(x);
while(!q.empty()){
int i=q.front();
q.pop();
for(unsigned j=0;j<v[i].size();j++){
int u=v[i][j].first;
int cs=v[i][j].second;
if(!ok[u] && mid>=cs){
ok[u]=1;
q.push(u);
}
}
}
if(ok[y]){
rt=mid;
}else{
lf=mid+1;
}
}
printf("%d",rt);
return 0;
}