#include #include #include #include #include using namespace std; vector > vec[1000001]; int dist[1000001]; int prv[1000001]; int main() { string line; int y=0; int n=0; while (1) { getline(cin, line); if (line == "") break; if (line[line.size()-1] != ' ') line += ' '; //cout<<"line:"< p; p.first = v; p.second = node; vec[0].push_back(p); } if (y > 0) { int upper = node - n; //cout<<" upper:"< p; p.first = v; p.second = node; vec[upper].push_back(p); } if (x > 0) { int left = node - 1; //cout<<" left:"< p; p.first = v; p.second = node; vec[left].push_back(p); } current = ""; x++; } else { current += c; } } //cout<<" po loop x:"<, std::vector >, std::greater > > q; for (int i=0; i<=n*m; i++) { dist[i] = 1000000001; pair p; p.first = 0; p.second = i; q.push(p); } dist[0] = 0; while(!q.empty()) { int u = q.top().second; q.pop(); if (vec[u].size() > 0) { int v = vec[u][0].second; int vw = vec[u][0].first; if (dist[v] > dist[u] + vw) { dist[v] = dist[u] + vw; pair p; p.first = dist[v]; p.second = v; q.push(p); } } if (vec[u].size() > 1) { int v = vec[u][1].second; int vw = vec[u][0].first; if (dist[v] > dist[u] + vw) { dist[v] = dist[u] + vw; pair p; p.first = dist[v]; p.second = v; q.push(p); } } } //cout<<"n:"<