Cod sursa(job #2320944)

Utilizator alexkosaAlex Kosa alexkosa Data 15 ianuarie 2019 14:01:35
Problema Ubuntzei Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.37 kb
#include <fstream>
#include <vector>
#include <set>
#include <climits>

using namespace std;

ifstream fin("ubuntzei.in");
ofstream fout("ubuntzei.out");

int n,m,a[2003][2003],k,v[17];

multiset<pair<int,int> >heap;

vector<pair<int,int> >g[2003];

void dijkstra(int start)
{
    heap.insert(make_pair(0,start));
    a[start][start]=0;
    while(!heap.empty())
    {
        int nod=heap.begin()->second;
        heap.erase(heap.begin());
        for(vector<pair<int,int> > :: iterator it=g[nod].begin();it!=g[nod].end();it++)
        {
            int to=it->first;
            int cost=it->second;
            if(a[start][to]>a[start][nod]+cost)
            {
                if(a[start][to]!=INT_MAX)
                    heap.erase(heap.find(make_pair(a[start][to],to)));
                a[start][to]=a[start][nod]+cost;
                heap.insert(make_pair(a[start][to],to));
            }
        }
    }
}

int main()
{
    fin>>n>>m>>k;
    for(int i=1;i<=k;i++)
    {
        fin>>v[i];
    }
    for(int i=1;i<=m;i++)
    {
        int a,b,c;
        fin>>a>>b>>c;
        g[a].push_back(make_pair(b,c));
        g[b].push_back(make_pair(a,c));
    }
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            a[i][j]=INT_MAX;
    dijkstra(1);
    for(int i=1;i<=k;i++)
        dijkstra(v[i]);
    fout<<a[1][n];

}