func_code_string: #include <bits/stdc++.h>   long long ago;   using namespace std;   template <class T = long long int>   T nxt() {     T x;     cin >> x;     return x;   }   long long int pw(long long int a, long long int b, long long int mod) {     if (!b) return 1;     if (b & 1) return a * pw(a * a % mod, b / 2, mod) % mod;     return pw(a * a % mod, b / 2, mod) % mod;   }   const long long int N = 1000 + 10;   const long long int INF = 8e18;   const long long int MOD = 1e9 + 7;   long long int n, m, mark[N];   double dist[N], S[N], Z[N];   vector<pair<long long int, double>> adj[N];   priority_queue<pair<double, long long int>, vector<pair<double, long long int>>,                  greater<pair<double, long long int>>>       pq;   int main() {     ios_base::sync_with_stdio(false);     cin.tie(nullptr);     cout.tie(nullptr);     cout << setprecision(15) << fixed;     cin >> n;     for (long long int i = 1; i <= n; i++) {       for (long long int j = 1; j <= n; j++) {         long long int p = nxt();         if (i == j || p == 0) continue;         adj[j].emplace_back(i, double(p) / 100);       }     }     fill(Z, Z + N, 1.0);     fill(dist, dist + N, INF);     dist[n] = 0;     pq.push({0, n});     while (!pq.empty()) {       long long int u = pq.top().second;       pq.pop();       if (mark[u]) continue;       mark[u] = 1;       for (auto [v, p] : adj[u]) {         if (mark[v]) continue;         S[v] += Z[v] * p * (dist[u] + 1);         Z[v] *= (1 - p);         dist[v] = (S[v] + Z[v]) / (1 - Z[v]);         pq.push({dist[v], v});       }     }     cout << dist[1] <<   n ;     return 0;   }   