Pagini recente » Cod sursa (job #281885) | Cod sursa (job #1808986) | Cod sursa (job #2582831) | Cod sursa (job #1600512) | Cod sursa (job #2315872)
#include <bits/stdc++.h>
using namespace std;
typedef pair < int , int > pii;
const int INF = 0x3f3f3f3f;
const int N_MAX = 50002;
priority_queue < pii , vector < pii > , greater < pii > > s;
vector < pii > v[N_MAX];
bitset < N_MAX > mark;
int d[N_MAX];
int main()
{
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
int n, m; f >> n >> m; f.ignore();
for(int i = 1; i <= m; i++)
{
int j = 0, x = 0, y = 0, c = 0;
char s[22]; f.getline(s, 20);
while(isdigit(s[j]))
x = x * 10 + (s[j++] - '0');
j++;
while(isdigit(s[j]))
y = y * 10 + (s[j++] - '0');
j++;
while(isdigit(s[j]))
c = c * 10 + (s[j++] - '0');
v[x].push_back({y, c});
}
memset(d, INF, sizeof(d));
d[1] = 0;
for(int i = 1; i <= n; i++)
s.push({d[i], i});
while(!s.empty())
{
int x = s.top().second;
s.pop();
mark[x] = 0;
for(int i = 0; i < v[x].size(); i++)
{
int y = v[x][i].first, c = v[x][i].second;
if(d[x] + c < d[y])
{
d[y] = d[x] + c;
if(!mark[y])
{
s.push({d[y], y});
mark[y] = 1;
}
}
}
}
for(int i = 2; i <= n; i++)
{
if(d[i] == INF)
d[i] = 0;
g << d[i] << " ";
}
g << '\n';
f.close();
g.close();
return 0;
}