func_code_string: #include <bits/stdc++.h>   using namespace std;   int n, m, k, trap[510];   int e[510][510];   long double t[510][510];   const long double EPS = 1e-9;   void mult(long double a[110][110], long double b[110][110],             long double c[110][110]) {     long double r[110][110] = {};     for (int i = 0; i < (int)(110); i++)       for (int j = 0; j < (int)(110); j++)         for (int k = 0; k < (int)(110); k++) r[i][k] += a[i][j] * b[j][k];     for (int i = 0; i < (int)(110); i++)       for (int j = 0; j < (int)(110); j++) c[i][j] = r[i][j];   }   int main() {     scanf( %d %d %d , &n, &m, &k);     for (int i = 0; i < n; i++) scanf( %d , &trap[i]);     while (m--) {       int x, y;       scanf( %d %d , &x, &y);       --x;       --y;       ++e[x][y];       ++e[y][x];     }     for (int i = 0; i < n; i++)       if (!trap[i]) {         int deg = 0;         for (int j = 0; j < n; j++) deg += e[i][j];         for (int j = 0; j < n; j++) t[i][j] -= (long double)e[i][j] / deg;         t[i][i] += 1.0;       } else {         t[i][i] = 1.0;       }     for (int i = 0; i < n; i++)       if (!trap[i]) {         int j = i;         for (int k = i; k < n; k++)           if (abs(t[k][i]) > abs(t[j][i])) j = k;         for (int k = 0; k < n; k++) swap(t[i][k], t[j][k]);         double scale = t[i][i];         for (int k = 0; k < n; k++) t[i][k] /= scale;         for (int j = 0; j < n; j++)           if (j != i) {             scale = t[j][i];             for (int k = 0; k < n; k++) t[j][k] -= t[i][k] * scale;           }       }     for (int i = 0; i < n; i++)       if (trap[i]) t[i][i] = -1.0;     long double m[110][110] = {}, v[510][510] = {}, r[110][110] = {};     int nr[510], next = 0;     for (int i = 0; i < n; i++)       if (trap[i]) nr[i] = next++;     for (int i = 0; i < n; i++)       if (trap[i]) {         int deg = 0;         for (int j = 0; j < n; j++) deg += e[i][j];         for (int j = 0; j < n; j++)           for (int k = 0; k < n; k++) v[i][k] -= t[j][k] / deg * e[i][j];         for (int j = 0; j < n; j++)           if (trap[j]) m[nr[i]][nr[j]] = v[i][j];       }     for (int i = 0; i < next; i++) r[i][i] = 1.0;     k -= 2;     while (k) {       if (k & 1) mult(m, r, r);       mult(m, m, m);       k /= 2;     }     long double ans = 0.0;     for (int i = 0; i < n; i++)       if (trap[i]) {         ans += -t[0][i] * r[nr[i]][next - 1];       }     printf( %.9lf n , (double)ans);     return 0;   }   