Cod sursa(job #1936946)

Utilizator bogoismarandaBogoi Smaranda bogoismaranda Data 23 martie 2017 16:12:11
Problema Algoritmul lui Dijkstra Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
# include<cstdio>
# include<vector>
# include<queue>
using namespace std;

typedef pair<int,int> ii;
typedef vector <int> vi;
typedef vector<ii> vii;
const int INF=1000000000;
const int NMAX=50005;
vector<ii> G[NMAX+5];
int main ()
{

  freopen ("dijkstra.in","r",stdin);
  freopen("dijkstra.out","w",stdout);
  int n,m,s,u,v,w,i;
  scanf("%d%d",&n,&m);
  s=1;
  for(int i=1; i<=m; i++)
    {
      scanf("%d%d%d",&u,&v,&w);
      G[u].push_back(ii(v,w));
    }
  vi dist(NMAX,INF);
  dist[s]=0;
  priority_queue<ii,vector<ii>,greater<ii>> pq;
  pq.push(ii(0,s));
  while(!pq.empty())
    {
      ii front=pq.top();
      pq.pop();
      int d=front.first;
      u=front.second;
      if(d>dist[u])
        continue;
      for(int j=0; j<(int)G[u].size(); j++)
        {
          int v=G[u][j].first,duv=G[u][j].second;
          if(dist[u]+duv<dist[v])
            {
              dist[v]=dist[u]+duv;
              pq.push(ii(dist[v],v));
            }
        }
    }
  for(i=1; i<=n; i++)
  {
      if(i==s) i++;
    printf("%d ",dist[i]);
  }
  return 0;
}