Cod sursa(job #1036302)

Utilizator roparexRoparex roparex Data 19 noiembrie 2013 10:20:23
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include<cstdio>
#include<queue>
#include<vector>
#define INF 200000000
using namespace std;
typedef vector<int>Vi;
Vi d;
int n,s,c[101][101],t[101];
class comp
{
    public:
    bool operator ()(int i,int j)
    {
        return d[i]<d[j];
    }
};
priority_queue<int,Vi,comp> Q;
void Dijkstra()
{
    d.assign(n+1,INF);
    d[s]=0;
    Q.push(s);
    int k;
    while(!Q.empty())
    {
        k=Q.top();
        Q.pop();
        for(int i=1;i<=n;i++)
        if(d[i]>d[k]+c[k][i])
        {
            d[i]=d[k]+c[k][i];
            t[i]=k;
            Q.push(i);
        }
    }
}
int main()
{
    int i,m,j,x,y,z;
    freopen("dijkstra.in","rt",stdin);
    freopen("dijkstra.out","wt",stdout);
    scanf("%ld%ld%ld",&n,&m,&s);
    for(i=1;i<=n;i++)
    for(j=i+1;j<=n;j++)
    c[i][j]=INF;
    for(i=1;i<=m;i++)
    {
        scanf("%d%d%d",&x,&y,&z);
        c[x][y]=z;
    }
    Dijkstra();
    for(i=2;i<=n;i++)
    printf("%ld",d[i]);
}