ÉèΪÊ×Ò³ ¼ÓÈëÊÕ²Ø

TOP

É¡±ø½µÂäµÄ¾«×¼±à³ÌʵÀý
2013-11-20 14:24:07 À´Ô´: ×÷Õß: ¡¾´ó ÖРС¡¿ ä¯ÀÀ:127´Î
Tags£ºÉ¡±ø ½µÂä ¾«×¼ ±à³Ì ʵÀý
    ÌâÒ⣺¸ø³öÒ»¸ö×ø±êϵ£¬Õâ¸ö½ÓÏÂÀ´»áÓÐÉ¡±ø½µÂäÔÚÕâ¸ö×ø±êϵÄÚ£¬Ã¿¸öÉ¡±øÓиö×ø±ê£¬ÏÖÔÚµØÇòµÄ¾ü¶ÓҪʹµÃÉ¡±ø½µÂäÔÚµØÉϵÄһ˲¼äɱËÀËûÃÇ£¬ËùÒÔËûÃÇÔìÁËһЩ¼¤¹â£¬ÕâЩ¼¤¹â¿ÉÒÔɱËÀÒ»ÕûÐлòÕßÒ»ÕûÁеÄÉ¡±ø£¬Ã¿ÐÐÿÁж¼ÓÐÒ»¸öÔ켤¹âµÄ»¨·Ñ£¬×îºóµÄ×Ü»¨·Ñ¾ÍÊÇËùÓм¤¹âÔì¼ÛµÄ³Ë»ý£¬ÎÊÔì¼Û×îÉÙÊǶàÉÙ¡£
    ˼·£ºÊ×ÏÈÎÒÃDz»¿¼ÂÇËûµÄ×Ü»¨·ÑÊǼ¤¹âÔì¼ÛµÄ³Ë»ý£¬Èç¹û½ö½öÊǺ͵ϰ£¬ÄÇôÕâ¸öÎÊÌâºÜ¼òµ¥£¬¾ÍÊÇÇó×îС¸î£¬µ«ÊÇÏÖÔÚËûµÄÔì¼Û²»ÊǺͣ¬ÄÇôÔõôת»¯ÄØ¡£
    ÕâʱºòÎÒÃǾÍÏëµ½Á˶ÔÊýµÄÐÔÖÊ£¬lg£¨a £© + lg£¨b£© = lg£¨a * b£©¡£¿ÉÒÔÖªµÀ£¬ÒªÊ¹µÃa * b ×îС£¬¾ÍÊÇʹµÃlg£¨a£© + lg£¨b£©×îС£¬ÄÇôÎÊÌâ¾Í¿ÉÒÔת»¯ÁË¡£
    ËùÒÔÎÒÃÇ¿ÉÒÔ½«Ã¿ÐÐÿÁеÄÔì¼Ûת»¯³Æ¶ÔÊý£¬È»ºóÇóÒ»´Î×îС¸î¼´¿É¡£
    ½¨Í¼¹ý³Ì¾Í²»×¸ÊöÁË£¬ºÜÄ£°æµÄ½¨Í¼¡£
    #include <set>
    #include <map>
    #include <stack>
    #include <cmath>
    #include <queue>
    #include <cstdio>
    #include <string>
    #include <vector>
    #include <iomanip>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    #define Max 2505
    #define FI first
    #define SE second
    #define ll long long
    #define PI acos£¨-1.0£©
    #define inf 0x3fffffff
    #define LL£¨x£© £¨ x ¡¶ 1 £©
    #define bug puts£¨"here"£©
    #define PII pair<int,int>
    #define RR£¨x£© £¨ x ¡¶ 1 | 1 £©
    #define mp£¨a,b£© make_pair£¨a,b£©
    #define mem£¨a,b£© memset£¨a,b,sizeof£¨a£©£©
    #define REP£¨i,s,t£© for£¨ int i = £¨ s £© ; i <= £¨ t £© ; ++ i £©
    using namespace std;
    #define N 5000
    int n , m , k ;
    struct kdq{
    int s , e  , next ;
    double l ;
    }ed[N] ;
    int head[N] , num ;
    int S , T ;
    void add£¨int s ,int e , double l £©{
    ed[num].e = e ;
    ed[num].l = l ;ed[num].next = head[s] ;
    head[s] = num ++ ;
    ed[num].e = s ;ed[num].l = 0 ;ed[num].next = head[e] ;
    head[e] = num ++ ;
    }
    void init£¨£©{
    mem£¨head ,-1£© ;num = 0 ;
    }
    int deep[N] ;
    int qe[N] ;
    int dinic_bfs£¨£©{
    mem£¨deep ,-1£© ;
    deep[S] = 0 ;
    int h = 0 , t = 0 ;
    qe[h ++ ] = S ;
    while£¨h > t£©{
    int tmp = qe[t ++ ] ;
    for £¨int i = head[tmp] ; ~i ; i = ed[i].next £©{
    double l = ed[i].l ;
    int e = ed[i].e ;
    if£¨l > 0 && deep[e] == -1£©{
    deep[e] = deep[tmp] + 1 ;
    qe[h ++ ] = e ;
    }
    }
    }
    return deep[T] != -1 ;
    }
    double dinic_dfs£¨int now ,double f£©{
    if£¨now == T£©return f ;
    double flow = 0 ;
    for £¨int i = head[now] ; ~i ; i = ed[i].next £©{
    int e = ed[i].e ;
    double l = ed[i].l ;
    if£¨deep[e] == deep[now] + 1 && l > 0 && £¨f - flow£© > 0 £©{
    double mm = min£¨l , f - flow£© ;
    double nn = dinic_dfs£¨e , mm£© ;
    flow += nn ;
    ed[i].l -= nn ;
    ed[i ^ 1].l += nn ;
    }
    }
    if£¨flow < 1e-8£©deep[now] = -2 ;
    return flow ;
    }
    double dinic£¨£©{
    double flow = 0 ;
    while£¨dinic_bfs£¨£©£©{
    flow += dinic_dfs£¨S,  inf£© ;
    }
    return flow ;
    }
    int main£¨£© {
    int tt ;
    cin ¡· tt ;
    while£¨tt -- £©{
    cin ¡· n ¡· m ¡· k ;
    init£¨£© ;
    T = n + m + 1 ;
    for £¨int i = 1 ; i <= n ; i ++ £©{
    double d ;
    scanf£¨"%lf",&d£© ;
    add£¨S , i , log£¨d * 1.0£©£© ;
    }
    for £¨int i = 1 ; i <= m ; i ++ £©{
    double d ;
    scanf£¨"%lf",&d£© ;
    add£¨i + n , T , log£¨d * 1.0£©£© ;
    }
    for £¨int i = 0 ; i < k ; i ++ £©{
    int x , y ;scanf£¨"%d%d",&x,&y£© ;
    add£¨x , y + n , inf£© ;
    }
    printf£¨"%.4f\n",exp£¨dinic£¨£©£©£© ;//×îºóת»¯»ØÀ´¾Í¿ÉÒÔÁË
    }
    return 0 ;
    }

¡¾´ó ÖРС¡¿¡¾´òÓ¡¡¿ ¡¾·±Ìå¡¿¡¾Í¶¸å¡¿¡¾Êղء¿ ¡¾ÍƼö¡¿¡¾¾Ù±¨¡¿¡¾ÆÀÂÛ¡¿ ¡¾¹Ø±Õ¡¿ ¡¾·µ»Ø¶¥²¿¡¿
·ÖÏíµ½: 
ÉÏһƪ£º¶þ²æ¶Ñ¶Ô½á¹¹ÌåʹÓÃÓÅÏȶÓÁÐ ÏÂһƪ£º´ÓÒ»¶Ñ¶þάµãÖÐÕÒµ½×î¸ß·Ö

ÆÀÂÛ

ÕÊ¡¡¡¡ºÅ: ÃÜÂë: (ÐÂÓû§×¢²á)
Ñé Ö¤ Âë:
±í¡¡¡¡Çé:
ÄÚ¡¡¡¡ÈÝ:

¡¤Linuxϵͳ¼ò½é (2025-12-25 21:55:25)
¡¤Linux°²×°MySQL¹ý³Ì (2025-12-25 21:55:22)
¡¤Linuxϵͳ°²×°½Ì³Ì£¨ (2025-12-25 21:55:20)
¡¤HTTP Åc HTTPS µÄ²î„ (2025-12-25 21:19:45)
¡¤ÍøÕ¾°²È«±ØÐ޿ΣºÍ¼ (2025-12-25 21:19:42)