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;
}
Ejemplo n.º 5
0
int main(){
    while(init())
        mcmf();
    return 0;
}