Cod sursa(job #550340)

Utilizator bacilaBacila Emilian bacila Data 9 martie 2011 13:36:11
Problema Algoritmul lui Dijkstra Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 1.46 kb
//90 disjtra ultimul test TLE
#include<fstream>
#include<cstdio>
#include<queue>
using namespace std;
vector<pair< int,int> > v[50003];
FILE *f;
priority_queue<pair< int,int> ,vector<pair<int,int> >,greater<pair<int,int > > > p;
int n,m,i,j,x,y,viz[50003],cost[50003],c;

int main ()
{f=fopen("dijkstra.in","r");

fscanf(f,"%d %d",&n,&m);
for(i=1;i<=n;i++)
{
cost[i]=2000000000;
}

for(i=1;i<=m;i++)
{fscanf(f,"%d %d %d",&x,&y,&c);
v[x].push_back(make_pair(c,y));
}
fclose(f);

viz[1]=1;


for(i=0;i<v[1].size();i++)
{                p.push(v[1][i]);
                 cost[v[1][i].second]=v[1][i].first;
                 
}

while(true)
{               if(p.empty())break;
                y=p.top().second;
                p.pop();
                if(!viz[y])
                {
                 for(i=0;i<v[y].size();i++)
                 {
                  if(cost[v[y][i].second]>cost[y]+v[y][i].first)
                               {cost[v[y][i].second]=v[y][i].first+cost[y];
                               if(!viz[v[y][i].second])
                               {v[y][i].first+=cost[y];
                               p.push(v[y][i]);
                               } 
                             
                               }
                 }
                  viz[y]=1; 
                 }
}
ofstream g("dijkstra.out");
for(i=2;i<=n;i++)
if(cost[i]!=2000000000)
g<<cost[i]<<" ";
else
g<<0<<" ";
 g.close();
return 0;
}