Pagini recente » Cod sursa (job #1032048) | Cod sursa (job #2953391) | Cod sursa (job #1081318) | Cod sursa (job #1113071) | Cod sursa (job #593281)
Cod sursa(job #593281)
#include <fstream>
#include <cstdlib>
#include <cstring>
#include <deque>
#define MAX 30001
using namespace std;
struct cost
{
short nod;
int cost;
}*v[MAX];
short grad[MAX];
int drum[MAX];
char use[MAX];
deque <short> q;
int X,Y;
inline void swap(int &x,int &y)
{
int z=x;
x=y;
y=z;
}
inline void bf(int nod)
{
for(short i=0;i<grad[nod];i++)
if(!use[v[nod][i].nod])
{
use[v[nod][i].nod]=1;
drum[v[nod][i].nod]=drum[nod]+v[nod][i].cost;
if(v[nod][i].nod==X) return;
q.push_back(v[nod][i].nod);
}
if(q.size())
{
nod=q.front();
q.pop_front();
bf(nod);
}
}
int main()
{
int M,N,x,y,d;
ifstream in;
memset(grad,0,sizeof(grad));
in.open("sate.in");
in>>N>>M>>X>>Y;
for(;M;--M)
{
in>>x>>y>>d;
grad[x]++;
grad[y]++;
}
in.close();
short nr=sizeof(cost);
for(short i=1;i<=N;i++)
grad[i]*=nr;
for(short i=1;i<=N;i++)
v[i]=(cost *)malloc(grad[i]);
memset(grad,0,sizeof(grad));
in.open("sate.in");
in>>N>>M>>X>>Y;
for(;M;--M)
{
in>>x>>y>>d;
if(x>y) swap(x,y);
v[x][grad[x]].nod=y;
v[y][grad[y]].nod=x;
v[x][grad[x]++].cost=d;
v[y][grad[y]++].cost=-d;
}
in.close();
memset(drum,0,sizeof(drum));
memset(use,0,sizeof(use));
use[Y]=1;
bf(Y);
ofstream out;
out.open("sate.out");
if(drum[X]<0) drum[X]*=-1;
out<<drum[X]<<'\n';
out.close();
return 0;
}