#include <cstdio> #include <algorithm> #include <cstring> using namespace std; const int N=200000; int e[N*2],pre[N*2],c[N*2],flow[N*2],now[N],d[N],vis[N],tail=1,cur[N],n,m,q[N],v,ans,a,b; void add(int u,int v,int cap){e[++tail]=v;c[tail]=cap;pre[tail]=now[u];now[u]=cur[u]=tail;} bool bfs(int s,int t){ int l=0,r=0; memset(vis,0,sizeof(vis)); q[++r]=s;d[s]=0;vis[s]=1; while(l<r){ int x=q[++l]; for(int i=now[x];i;i=pre[i]) if(!vis[e[i]] && c[i]>0) { q[++r]=e[i];vis[e[i]]=1;d[e[i]]=d[x]+1; } } return vis[t]; } int dfs(int x,int a){ if(x==n+m+2 || a==0) return a; int flow=0,f; for(int &i=cur[x];i;i=pre[i]) if(d[x]+1==d[e[i]] && (f=dfs(e[i],min(a,c[i])))>0){ c[i]-=f;c[i^1]+=f;flow+=f;a-=f; if(a==0) break; } return flow; } void print(int a){ printf("Edges of %d :",a); for(int i=now[a];i;i=pre[i]) if(c[i]) printf("%d(%d) ",e[i],c[i]);printf("\n"); } int main(){ freopen("1497.in","r",stdin);freopen("1497.out","w",stdout); scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) scanf("%d",&v),add(i,n+m+2,v),add(n+m+2,i,0); for(int i=1;i<=m;i++) { scanf("%d%d%d",&a,&b,&v); add(n+m+1,i+n,v); add(i+n,n+m+1,0); add(i+n,a,2099999999+1);add(a,i+n,0); add(i+n,b,2099999999+1);add(b,i+n,0); ans+=v; } //print(11);for(int i=6;i<=10;i++) print(i);for(int i=1;i<=5;i++) print(i);print(12); while(bfs(n+m+1,n+m+2)) { for(int i=1;i<=n+m+2;i++) cur[i]=now[i]; ans-=dfs(n+m+1,2099999999); } printf("%d",ans); return 0; }