int main() { int u,v,len,nn,m,i; while(scanf("%d%d",&nn,&m)!=EOF) { chu(); for(i=0;i<m;i++) { scanf("%d%d%d",&u,&v,&len); add(u,v+nn,1,len); } build(nn); n=2*nn+2; mcmf(nn*2+1,nn*2+2); if(maxflow < nn) { printf("-1\n"); } else { printf("%d\n",mincost); } } return 0; }
int main() { int i,f,val,len,s,t,nn; char ch[110]; while(scanf("%d",&nn),nn) { chu(); n=2*nn+2; s=2*nn+1; t=2*nn+2; for(i=1;i<=nn;i++) { scanf("%d",&val); add(s,i,1,0); add(i+nn,t,1,0); map[i]=val; } for(i=1;i<=nn;i++) { scanf("%s",ch); len=strlen(ch); for(f=0;f<len;f++) { if('1' == ch[f]) { add(i,f+1+nn,1,-(map[i]^map[f+1])); } } } mcmf(s,t); printf("%d\n",-mincost); } return 0; }
void build() { int i,f,u,v; for(i=1;i<=nn;i++) { for(f=1;f<=nn;f++) { v=turn(i,f)-1; if(i-1>0 && f>0) { u=turn(i-1,f); add(u,v,1,-map[i][f]); } if(i>0 && f-1>0) { u=turn(i,f-1); add(u,v,1,-map[i][f]); } if((1 == i&& 1 == f)||(nn == i && nn == f)) { add(v,v+1,2,0); continue; } add(v,v+1,1,0); } } n=2*nn*nn+2; add(2*nn*nn+1,1,2,-map[1][1]); add(2*nn*nn,2*nn*nn+2,2,0); mcmf(2*nn*nn+1,2*nn*nn+2); }
int main() { char ch[5]; int cas, tt; cin >> cas; for(int i = 0 ;i < cas;i++ ) { cin >> nn >> kk >> mm; for(int f = 0 ;f < nn;f++) { scanf("%s",ch); A[f] = ch[0] - 'A'; } for(int f = 0 ;f < mm;f++) { for(int g = 0 ;g < nn; g++) { scanf("%s",ch); B[g] = ch[0] - 'A'; } memset(val, 0, sizeof(val)); for(int g = 0 ;g < nn; g++) val[A[g]][B[g]] ++; n = 2 + 26 * 2; mcmf_init(); int s = n - 1; int t = n; for(int g = 1;g <= 26;g++) { add(s, g, 1, 0); add(26 + g , t, 1, 0); } for(int g = 1;g <= 26;g++) for(int h = 1;h <= 26;h ++) add(g,26 + h, 1, - val[g-1][h-1]); mcmf(s, t); printf("%.4lf\n", - mincost / (double) nn); } } return 0; }
int main(){ while(init()) mcmf(); return 0; }