Cod sursa(job #2504559)

Utilizator Tudor2PopescuPopescu Tudor-Cristian Tudor2Popescu Data 5 decembrie 2019 09:52:18
Problema Sate Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.64 kb
#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;
}