题面传送门 什么题目卡精度卡到人没了。 首先肯定先化乘为加,取个log 然后一个点所在的一行或一列肯定至少有一个要被选中,注意到行列分开,所以直接二分图最小点覆盖就好了。 然后你写完一个普通的网络流交上去啪的一下很快啊就WA了。 因为神奇的POJ浮点数输出%f code:
%f
#include #include #include #include #include #include #include #define I inline #define max(a,b) ((a)>(b)?(a):(b)) #define min(a,b) ((a)<(b)?(a):(b)) #define abs(x) ((x)>0?(x):-(x)) #define re register #define RI re int #define ll long long #define db double #define lb long db #define N 100 #define M 500 #define mod 1000000007 #define Mod (mod-1) #define eps (1e-9) #define U unsigned int #define it iterator #define Gc() getchar() #define Me(x,y) memset(x,y,sizeof(x)) #define d(x,y) (m*x+(y)) #define R(n) (rand()*rand()%(n)+1) #define Pc(x) putchar(x) using namespace std; int T,n,m,k,d[N+5],Ns[N+5],x,y,Ts,S;db z,Ans;queue Q; struct yyy{int to;db w;int z;}tmp;struct ljb{int head,h[N+5];yyy f[M+5<<2];I void add(int x,int y,db z){f[head]=(yyy){y,z,h[x]};h[x]=head++;}}s; I int bfs(){ RI i;while(!Q.empty()) Q.pop();Q.push(S);Me(d,0x3f);d[S]=0;Ns[S]=s.h[S];while(!Q.empty()) for(x=Q.front(),Q.pop(),i=s.h[x];~i;i=tmp.z){ tmp=s.f[i];if(tmp.w