Pagini recente » Cod sursa (job #1588861) | Cod sursa (job #2830221) | Cod sursa (job #866815) | ems3 | Cod sursa (job #530330)
Cod sursa(job #530330)
// sortare muchii + cautare binara + bf //
#include<stdio.h>
#include<vector>
#include<cstring>
#include<algorithm>
#define mp make_pair
using namespace std;
FILE *f=fopen("pscnv.in","r");
FILE *g=fopen("pscnv.out","w");
int N,M,X,Y,ok,m,sol,c[250001];
bool viz[250001];
char cit[32];
vector <pair <int,int> > a[250001];
void bf(){
int u,p;
p=1;u=1;c[1]=X;
while(p<=u){
int nod=c[p];
for(unsigned int i=0;i<a[nod].size();i++)
if( !viz[a[nod][i].first]){
if(a[nod][i].second <=m){
if( a[nod][i].first == Y)
{ok=1,p=u;break;}
else
c[++u]=a[nod][i].first;}
else break;}
p++;}
}
int cmp(const pair<int,int> &a,const pair<int,int> &b){
return a.second < b.second;
}
int main(){
fscanf(f,"%d%d%d%d\n",&N,&M,&X,&Y);
for(register int i=1;i<=M;++i)
{ int x,y,z,p;
fgets(cit,32,f);
for (x = 0,p=0; cit[p]!=' '; p++)
x = x * 10 + cit[p] - '0';
for (y = 0,p++; cit[p]!=' '; p++)
y = y * 10 + cit[p] - '0';
for (z = 0,p++; p<strlen(cit) &&cit[p]!=' ' && cit[p] != '\n'; p++)
z = z * 10 + cit[p] - '0';
if(x!=y)
a[x].push_back(mp(y,z));
}
int p=1,u=1000;
for(int i=1;i<=N;++i)
sort(a[i].begin(),a[i].end(),cmp);
while(p<=u){
m=(p+u)/2,ok=0;
memset(viz,0,sizeof(viz));
bf();
if(ok)
sol=m,u=m-1;
else p=m+1;
}
fprintf(g,"%d",sol);
return 0;
}