Pagini recente » Cod sursa (job #81677) | Cod sursa (job #2893593) | Cod sursa (job #2332187) | Cod sursa (job #501903) | Cod sursa (job #345437)
Cod sursa(job #345437)
# include <stdio.h>
# include <stdlib.h>
# include <string.h>
//7:09
const long int MAXN=250000;
const long int MAXM=500000;
long int used[MAXN+1],pozh[MAXN+1],heap[MAXM+1],raza[MAXN+1],heaplen,n,m,source,sink;
typedef struct NOD
{
long int nod;
long int k;
long int next;
};
typedef struct LISTA
{
long int begin,end;
};
LISTA ladiac[MAXN+1];
LISTA next[1001];
NOD space[3*MAXM+1]; long int spacelen;
void add(LISTA &l, long int nod, long int k)
{
spacelen++;
space[spacelen].nod=nod;
space[spacelen].k=k;
space[spacelen].next=0;
if (l.begin)
{
space[l.end].next=spacelen;
l.end=spacelen;
}
else
{
l.begin=spacelen;
l.end=spacelen;
}
}
void load(long int nod)
{
long int p=ladiac[nod].begin;
long int maxim;
while (p)
{
if (!used[space[p].nod])
{
if (raza[nod]>space[p].k) maxim=raza[nod];
else maxim=space[p].k;
if (!raza[space[p].nod])
{
raza[space[p].nod]=maxim;
add(next[maxim],space[p].nod,0);
}
else if (raza[space[p].nod]>maxim)
{
raza[space[p].nod]=maxim;
add(next[maxim],space[p].nod,0);
}
}
p=space[p].next;
}
}
char buff[10000000];
void citire()
{
FILE *f=fopen("pscnv.in","r");
fscanf(f,"%ld%ld%ld%ld",&n,&m,&source,&sink);
fread(buff,1,10000000,f);
char *p=strtok(buff," \n");
long int i,place,nod,k;
for (i=1;i<=m;i++)
{
//fscanf(f,"%ld%ld%ld",&muchie[i].a,&muchie[i].b,&muchie[i].k);
place=atoi(p);
p=strtok(NULL," \n");
nod=atoi(p);
p=strtok(NULL," \n");
k=atoi(p);
p=strtok(NULL," \n");
add(ladiac[place],nod,k);
}
fclose(f);
}
void scrie(long int sol)
{
FILE *g=fopen("pscnv.out","w");
fprintf(g,"%ld\n",sol);
fclose(g);
}
long int calculeaza()
{
long int m,p,dist;
used[source]=1;
load(source);
for (dist=1;dist<=1000;dist++)
{
p=next[dist].begin;
while (p)
{
if (!used[space[p].nod])
{
used[space[p].nod]=1;
load(space[p].nod);
}
p=space[p].next;
}
}
return raza[sink];
}
int main()
{
citire();
scrie(calculeaza());
return 0;
}