ÌâÒ⣺¸ø³öÒ»¸ö×ø±êϵ£¬Õâ¸ö½ÓÏÂÀ´»áÓÐÉ¡±ø½µÂäÔÚÕâ¸ö×ø±êϵÄÚ£¬Ã¿¸öÉ¡±øÓиö×ø±ê£¬ÏÖÔÚµØÇòµÄ¾ü¶ÓҪʹµÃÉ¡±ø½µÂäÔÚµØÉϵÄһ˲¼äɱËÀËûÃÇ£¬ËùÒÔËûÃÇÔìÁËһЩ¼¤¹â£¬ÕâЩ¼¤¹â¿ÉÒÔɱËÀÒ»ÕûÐлòÕßÒ»ÕûÁеÄÉ¡±ø£¬Ã¿ÐÐÿÁж¼ÓÐÒ»¸öÔ켤¹âµÄ»¨·Ñ£¬×îºóµÄ×Ü»¨·Ñ¾ÍÊÇËùÓм¤¹âÔì¼ÛµÄ³Ë»ý£¬ÎÊÔì¼Û×îÉÙÊǶàÉÙ¡£ ˼·£ºÊ×ÏÈÎÒÃ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 ; } |