Pagini recente » Cod sursa (job #2060362) | Cod sursa (job #1927071) | Cod sursa (job #3178603) | Cod sursa (job #3274591) | Cod sursa (job #2504559)
#include <iostream>
#include <fstream>
#include <queue>
#include <string.h>
#include <vector>
#define NMax 30002
using namespace std;
ifstream fin("sate.in");
ofstream fout("sate.out");
int n,m,d[NMax],viz[NMax],st,sf;
char s[1005];
queue <int> Q;
vector < pair <int, int> > Edge[NMax];
void citire()
{
int x, y, c, nr, cnt;
fin>>n>>m>>st>>sf;
for(int k=0;k<=m;k++)
{
cnt=0;
fin.getline(s,1000);
for (int i = 0; s[i] != '\0'; ++i) {
if (s[i] >= '0' && s[i] <= '9') {
nr = 0;
cnt++;
while (s[i] >= '0' && s[i] <= '9') {
nr = nr * 10 + s[i] - '0';
++i;
}
if (cnt == 1)
x = nr;
if (cnt == 2)
y = nr;
if (cnt == 3)
c = nr;
}
}
Edge[x].push_back(make_pair(y, c));
Edge[y].push_back(make_pair(x, -c));
}
}
void bfs(int s)
{
int i,nod;
Q.push(s);
d[s]=0;
viz[s]=1;
while(!Q.empty())
{
nod=Q.front();
Q.pop();
for(int k=0;k<=Edge[nod].size();k++)
{
int next=Edge[nod][k].first;
int cost=Edge[nod][k].second;
if(viz[next]!=1)
{
viz[next]=1;
d[next]=d[nod]+cost;
if(next==sf) break;
Q.push(next);
}
}
}
fout<<d[sf];
}
int main()
{
citire();
bfs(st);
fin.close();
fout.close();
return 0;
}