Pagini recente » Cod sursa (job #667985) | Cod sursa (job #2104503) | Cod sursa (job #2138939) | Cod sursa (job #2598851) | Cod sursa (job #697668)
Cod sursa(job #697668)
#include <fstream>
#include <vector>
#define InFile "sate.in"
#define OutFile "sate.out"
#define INF 2000000000
#define NMAX 300008
#define MMAX 100008
using namespace std;
struct Arc{int x,y,c;};
vector <Arc> G[NMAX];
int dmin[NMAX],n,m,x0,y,viz[NMAX];
void citire();
void dijkstra();
void afisare();
int main()
{
citire();
dijkstra();
afisare();
return 0;
}
void citire()
{
ifstream fin(InFile);
fin>>n>>m>>x0>>y;
Arc crt;
int x,y1;
for (int i=0;i<m;i++)
fin>>x>>crt.y>>crt.c, G[x].push_back(crt), y1=crt.y, crt.y=x, G[y1].push_back(crt);
}
void dijkstra()
{
int ok=1,min,k,i;
for (i=1;i<=n;i++)
dmin[i]=INF;
for (i=0;i<G[x0].size();i++)
dmin[G[x0][i].y]=G[x0][i].c;
viz[x0]=1;
while (ok)
{
min=INF;
for (i=1;i<=n;i++)
if (!viz[i] && min>dmin[i])
{
k=i;
min=dmin[i];
}
if (min!=INF)
{
viz[k]=1;
for (i=0;i<G[k].size();i++)
{
if (dmin[G[k][i].y]> dmin[k]+G[k][i].c)
dmin[G[k][i].y]=dmin[k]+G[k][i].c;
}
}
else ok=0;
}
}
void afisare()
{
ofstream fout(OutFile);
fout<<dmin[y]<<"\n";
}