Pagini recente » Cod sursa (job #1750522) | Cod sursa (job #3193264) | Cod sursa (job #728839) | Cod sursa (job #1518753) | Cod sursa (job #1415530)
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
using namespace std;
int MAX=5000,s[100],d[100],p[100];
int main()
{
int p1,q1,w1,n,m,x1,y1,min,y,j,a[400][400];
FILE *input=fopen("sate.in","r");
FILE *output=fopen("sate.out","w");
fscanf(input,"%d",&n);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(i==j)
a[i][j]=0;
else
a[i][j]=MAX;
}
}
fscanf(input,"%d",&m);
fscanf(input,"%d%d",&x1,&y1);
for(int j=0;j<m;j++)
{
fscanf(input,"%d %d %d",&p1,&q1,&w1);
a[p1][q1]=w1;
a[q1][p1]=-w1;
}
s[x1]=1;
for(int i=1;i<=n;i++)
{
d[i]=a[x1][i];
if((i!=x1)&&(d[i]<MAX))
{
p[i]=x1;
}
}
for(int i=1;i<=n;i++)
{
for(j=1,min=MAX;j<=n;j++)
if((s[j]==0)&&(d[j]<min))
{
min=d[j];
y=j;
}
s[y]=1;
for(int j=1;j<=n;j++)
{
if((s[j]==0)&&(d[j]>d[y]+a[y][j]))
{
d[j]=d[y]+a[y][j];
p[j]=y;
}
}
}
if(p[y1]!=0)
fprintf(output,"%d",d[y1]);
else
fprintf(output,"0");
}