Pagini recente » Cod sursa (job #2957817) | Cod sursa (job #928934) | Cod sursa (job #2618094) | Cod sursa (job #3244404) | Cod sursa (job #1194269)
//pentru casa. nu-i de citit
#include <fstream>
#include <iostream>
#include <vector>
#include <queue>
#include <stdlib.h>
#define mx 30000
#define inf 2147483647
using namespace std;
int n,m,x,y, grad[mx];
struct muchie
{
int destinatie;
int cost;
} *Gr[mx];
vector< pair<int,int> > G[mx];
int best[mx];
ifstream f("sate.in");
ofstream g("sate.out");
void Initialisation()
{
for(int i=0;i<mx;i++)
{
best[i]=0;
}
}
void Read()
{
f>>n>>m>>x>>y;
Initialisation();
for(int i=0;i<m;i++)
{
int a,b,d;
f>>a>>b>>d;
G[a].push_back( make_pair(b,d) );
G[b].push_back( make_pair(a,-d) );
}
}
muchie make_muchie(int dest, int cost)
{
muchie aux;
aux.destinatie=dest;
aux.cost=cost;
return aux;
}
void Read2()
{
Initialisation();
f>>n>>m>>x>>y;
for(int i=0;i<m;i++)
{
int a,b,c;
f>>a>>b>>c;
grad[a]++;
grad[b]++;
}
for(int i=1;i<=n;i++)
{
Gr[i] = (muchie*) malloc(grad[i]*sizeof(muchie) );
grad[i]=0;
}
f.close();
ifstream f("sate.in");
f>>n>>m>>x>>y;
for(int i=0;i<m;i++)
{
int a,b,c;
f>>a>>b>>c;
Gr[a][grad[b]++]=make_muchie(b,c);
Gr[b][grad[a]++]=make_muchie(a,-c);
}
}
int Q[mx], Left, Right;
void BFSit()
{
Right++;
Q[Left]=x;
for(;Left<Right && Q[Left]!=y;Left++)
{
int curent=Q[Left];
for(int i=0; i<grad[curent]; i++)
{
if(!best[Gr[curent][i].destinatie])
{
best[Gr[curent][i].destinatie]=best[curent]+Gr[curent][i].cost;
// g<<best[curent]<<' '<<Gr[curent][i].cost<<'\n';
Q[++Right]=Gr[curent][i].destinatie;
}
}
}
}
void BFS(int curent)
{
for(int i=0;i<G[curent].size();i++)
{
if(best[ G[curent][i].first ]==0)
{
best[G[curent][i].first]=best[curent]+G[curent][i].second;
BFS(G[curent][i].first);
}
}
}
int main()
{
Read2();
for(int i=1;i<=n;i++)
{
for(int j=0;j<grad[i];j++)
{
g<<i<<' '<<Gr[i][j].destinatie<<' '<<Gr[i][j].cost<<'\n';
}
g<<'\n';
}
BFSit();
g<<best[y];
return 0;
}
/*
int d, best[mx];
queue<int> Q;
for(Q.push(x) ; Q.size() ; Q.pop() )
{
for(int i=0;i<G[Q.back()].size();i++)//daca nu mere stim unde-i problema
{
int val;
val=( Q.back()<G[Q.back()][i].first() ) ? G[Q.back()][i].second() : -G[Q.back()][i].second();
best[G[Q.back()][i].first()]=
Q.push(G[Q.back()][i].first());
}
}
*/