func_code_string: #include <bits/stdc++.h>   using namespace std;   template <typename T>   inline void read(T &x) {     x = 0;     char c = getchar();     bool flag = false;     while (!isdigit(c)) {       if (c ==  - ) flag = true;       c = getchar();     }     while (isdigit(c)) {       x = (x << 1) + (x << 3) + (c ^ 48);       c = getchar();     }     if (flag) x = -x;   }   int n, m, q;   int dis[5010];   bool vis[5010];   vector<pair<int, int> > ve;   struct edge {     int to, nxt, v, c;     edge(int x = 0, int y = 0, int z = 0, int w = 0) {       to = x, nxt = y, v = z, c = w;     }   } e[5010];   int head[5010], edge_cnt = 1;   void add(int from, int to, int val, int cost) {     e[++edge_cnt] = edge(to, head[from], val, cost), head[from] = edge_cnt;     e[++edge_cnt] = edge(from, head[to], 0, -cost), head[to] = edge_cnt;   }   bool spfa() {     for (int i = 1; i <= n; ++i) vis[i] = false, dis[i] = 1000000000;     queue<int> q;     q.push(1), vis[1] = true, dis[1] = 0;     while (!q.empty()) {       int x = q.front();       q.pop(), vis[x] = false;       for (int i = head[x]; i; i = e[i].nxt) {         int y = e[i].to, c = e[i].c;         if (dis[y] <= dis[x] + c || !e[i].v) continue;         dis[y] = dis[x] + c;         if (!vis[y]) q.push(y), vis[y] = true;       }     }     return dis[n] != 1000000000;   }   int dfs(int x, int lim) {     if (x == n) return lim;     vis[x] = true;     int res = lim, flow;     for (int i = head[x]; i; i = e[i].nxt) {       int y = e[i].to, v = e[i].v;       if (dis[y] != dis[x] + e[i].c || vis[y] || !v) continue;       if (flow = dfs(y, min(res, v))) {         res -= flow, e[i].v -= flow, e[i ^ 1].v += flow;         if (!res) break;       }     }     return lim - res;   }   void dinic() {     int flow, v = 0, s = 0;     while (spfa())       while (flow = dfs(1, 1000000000))         v += flow, s += flow * dis[n], ve.push_back(make_pair(v, s));   }   int main() {     read(n), read(m);     for (int i = 1; i <= m; ++i) {       int x, y, v;       read(x), read(y), read(v), add(x, y, 1, v);     }     dinic(), read(q);     while (q--) {       int x;       double v = 1000000000;       read(x);       for (int i = 0; i < ve.size(); ++i)         v = min(v, (double)(x + ve[i].second) / ve[i].first);       printf( %.10lf n , v);     }     return 0;   }   