Pagini recente » Cod sursa (job #1414147) | Cod sursa (job #1826932) | Cod sursa (job #1210173) | Cod sursa (job #2053429) | Cod sursa (job #868557)
Cod sursa(job #868557)
#include <iostream>
#include <cstdio>
#include <vector>
#include <cstring>
#include <queue>
#include <cstdlib>
#define DN 250005
#define pb push_back
#define mp make_pair
#define f first
#define s second
#define un unsigned
using namespace std;
int minim[DN],maxc;
vector<pair<int,int> > list[DN];
vector<int> v[1024];
FILE *in,*out;
void read(int &n,int &m,int &x,int &y)
{
in=fopen("pscnv.in","rb");
int ind=0,count=0,a,b,c;
long lsize;
char * buffer;
size_t result;
fseek(in,0,SEEK_END);
lsize=ftell(in);
rewind(in);
buffer=(char*) malloc(sizeof(char)*lsize);
result=fread(buffer,1,lsize,in);
for(int i=0;i<lsize;++i)
{
if(isdigit(buffer[i]))
{
int nr=0;
while(isdigit(buffer[i]))
{
nr=nr*10+buffer[i]-'0';
++i;
}
++ind;
if(ind==1) n=nr;
else if(ind==2) m=nr;
else if(ind==3) x=nr;
else if(ind==4) y=nr;
else
{
++count;
if(count==1) a=nr;
else
if(count==2) b=nr;
else c=nr;
if(count==3)
{
list[a].pb(mp(b,c));
maxc=max(maxc,c);
count=0;
}
}
}
}
}
void expand(int nod)
{
for(un int i=0;i<list[nod].size();++i)
{
int next_nod=list[nod][i].f;
int cost=list[nod][i].s;
if(minim[next_nod] > max(cost,minim[nod]) )
{
minim[next_nod]=max(cost,minim[nod]);
v[max(cost,minim[nod])].pb(next_nod);
}
}
}
int main()
{
int n,m,x,y;
out=fopen("pscnv.out","w");
read(n,m,x,y);
memset(minim,127,sizeof(minim));
minim[x]=0;
expand(x);
for(int i=1;i<=maxc;++i)
for(int j=0;j<v[i].size();++j)
{
if(v[i][j]==y)
{
fprintf(out,"%d",minim[y]);
return 0;
}
if(minim[v[i][j]]==i)
expand(v[i][j]);
}
return 0;
}