Pagini recente » Cod sursa (job #3148985) | Cod sursa (job #2885209) | Cod sursa (job #3154547) | Cod sursa (job #2471843) | Cod sursa (job #593274)
Cod sursa(job #593274)
#include <fstream>
#include <cstdlib>
#include <cstring>
#include <deque>
#define MAX 30001
using namespace std;
struct cost
{
int nod,cost;
}*v[MAX];
int grad[MAX],drum[MAX],use[MAX];
deque <int> q;
int X,Y;
inline void bf(int nod)
{
for(int i=1;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==Y) 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();
for(int i=1;i<=N;i++)
v[i]=(cost *)malloc(grad[i]*8);
memset(grad,0,sizeof(grad));
in.open("sate.in");
in>>N>>M>>X>>Y;
for(;M;--M)
{
in>>x>>y>>d;
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[X]=1;
bf(X);
ofstream out;
out.open("sate.out");
out<<drum[Y]<<'\n';
out.close();
return 0;
}