Pagini recente » Radu Visan | Monitorul de evaluare | Diferente pentru utilizator/dausyana intre reviziile 5 si 4 | Sandbox | Cod sursa (job #1036302)
#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]);
}