Pagini recente » Cod sursa (job #2890600) | Cod sursa (job #2392549) | Cod sursa (job #2765499) | Cod sursa (job #858512) | Cod sursa (job #1053521)
#include<fstream>
#include<cstdlib>
#include<cstring>
using namespace std;
int n,m,start,final,sol[30010];
struct S{int nod,cost;};
S *A[30010],Coada[30010];
int inc=-1,sf,ns;
bool vizitat[30010];
char s[1000];
void BFS(int x)
{
int i,limita;
vizitat[x]=true;
inc++;
Coada[inc].nod=x;
Coada[inc].cost=0;
while(sf<=inc && !sol[final])
{
x=Coada[sf].nod;
sf++;
limita=A[x][0].nod;
for(i=1;i<=limita && !sol[final];i++)
{
if(vizitat[A[x][i].nod]==false)
{
vizitat[A[x][i].nod]=true;
if(x<=A[x][i].nod)
sol[A[x][i].nod]=sol[x]+A[x][i].cost;
else
sol[A[x][i].nod]=sol[x]-A[x][i].cost;
Coada[++inc]=A[x][i];
}
}
}
}
int main()
{
int i,x,y,z,j;
//parsez citirea
ifstream fin("sate.in");
fin.getline(s,999);
ns=strlen(s);
//pentru n
n=s[0]-'0';
i=1;
while(s[i]>='0' && s[i]<='9')
{
n=n*10+(s[i]-'0');
i++;
}
i++;
//pentru m
m=s[i]-'0';
i++;
while(s[i]>='0' && s[i]<='9')
{
m=m*10+(s[i]-'0');
i++;
}
i++;
//pentru start
start=s[i]-'0';
i++;
while(s[i]>='0' && s[i]<='9')
{
start=start*10+(s[i]-'0');
i++;
}
i++;
//pentru final
final=s[i]-'0';
i++;
while(s[i]>='0' && s[i]<='9' && i<ns)
{
final=final*10+(s[i]-'0');
i++;
}
for(i=1;i<=n;i++)
{
A[i]=(S *)realloc(A[i],sizeof(S));
A[i][0].nod=0;
}
for(i=1;i<=m;i++)
{
fin.getline(s,999);
ns=strlen(s);
//pentru x
x=s[0]-'0';
j=1;
while(s[j]>='0' && s[j]<='9')
{
x=x*10+(s[j]-'0');
j++;
}
j++;
//pentru y
y=s[j]-'0';
j++;
while(s[j]>='0' && s[j]<='9')
{
y=y*10+(s[j]-'0');
j++;
}
j++;
//pentru z
z=s[j]-'0';
j++;
while(s[j]>='0' && s[j]<='9' && j<ns)
{
z=z*10+(s[j]-'0');
j++;
}
A[x][0].nod++;
A[x]=(S *)realloc(A[x],(A[x][0].nod+1)*sizeof(S));
A[x][A[x][0].nod].nod=y;
A[x][A[x][0].nod].cost=z;
A[y][0].nod++;
A[y]=(S *)realloc(A[y],(A[y][0].nod+1)*sizeof(S));
A[y][A[y][0].nod].nod=x;
A[y][A[y][0].nod].cost=z;
}
fin.close();
BFS(start);
ofstream fout("sate.out");
fout<<sol[final]<<"\n";
fout.close();
return 0;
}