1 #include <bits/stdc++.h>
2 using namespace std;
3 typedef long long ll;
4 const ll INF = 1e18;
5 struct edge
6 {
7 int u, v, nxt;
8 ll w, c;
9 }e[25005];
10 queue<int> Q;
11 int n, etot = 1, fst[1005], fa[1005];
12 bool inq[1005];
13 ll ans, dis[1005];
14
15 void addedge(int u, int v, ll w, ll c)
16 {
17 e[++etot] = (edge){u, v, fst[u], w, c}, fst[u] = etot;
18 e[++etot] = (edge){v, u, fst[v], 0, -c}, fst[v] = etot;
19 }
20
21 bool SPFA()
22 {
23 int u;
24 memset(dis, 63, sizeof(dis));
25 dis[n + 2] = 0, Q.push(n + 2), inq[n + 2] = true;
26 while(!Q.empty())
27 {
28 u = Q.front(), Q.pop();
29 for(int i = fst[u]; i; i = e[i].nxt)
30 if(e[i].w && dis[e[i].v] > dis[u] + e[i].c)
31 {
32 dis[e[i].v] = dis[u] + e[i].c;
33 fa[e[i].v] = i;
34 if(!inq[e[i].v])
35 Q.push(e[i].v), inq[e[i].v] = true;
36 }
37 inq[u] = false;
38 }
39 if(dis[n + 1] >= INF) return false;
40 return true;
41 }
42
43 void Edmond_Karp()
44 {
45 ll w = INF;
46 for(int i = fa[n + 1]; i; i = fa[e[i].u])
47 w = min(w, e[i].w);
48 for(int i = fa[n + 1]; i; i = fa[e[i].u])
49 e[i].w -= w, e[i ^ 1].w += w, ans += e[i].c * w;
50 }
51
52 int main()
53 {
54 int m, u, v;
55 ll w;
56 cin >> n >> m;
57 addedge(n + 2, 1, INF, 0);
58 for(int i = 1; i <= n; ++i)
59 {
60 cin >> w;
61 addedge(i, i + 1, INF - w, 0);
62 }
63 for(int i = 1; i <= m; ++i)
64 {
65 cin >> u >> v >> w;
66 addedge(u, v + 1, INF, w);
67 }
68 while(SPFA())
69 Edmond_Karp();
70 cout << ans << endl;
71 return 0;
72 }