#include <cstdio> #include <iostream> #include <algorithm> #include <queue> #include <stack > #include <cstdlib> #include <cmath> #include <set> #include <map> #include <vector># Define INF 100000000using namespace std;struct node{int B,p;bool operator < (const node& a) const{if (b = = a.b) {return P < A.P;} Else{return b < a.b;}}; Node A[105][105];int m[105];int Main () {int t;cin >> t;while (t--) {int n;cin >> n;set<int> se;for (int i = 0;i < n;i++) {scanf ("%d", &m[i]), for (int j = 0;j < m[i];j++) {scanf ("%d%d", &A[I][J].B,&A[I][J].P); if ( Se.find (a[i][j].b) = = Se.end ()) {Se.insert (a[i][j].b);}} Sort (a[i],a[i]+m[i]);} Set<int>::iterator ite = Se.begin ();d ouble ans = 0;for (ite = Se.begin (); ITE! = Se.end (); ite++) {node q;q.b = *ite;q. p = 0;int p = 0;int flag = 0;for (int i = 0;i < n;i++) {int x = inf;for (int j = 0;j < m[i];j++) {if (a[i][j].b >= q.b {if (A[I][J].P < x) {x = A[I][J].P;}}} if (x = = INF) {flag = 1;} Else{p + = x;}} if (flag) {break;} Else{ans = max (ans,q.b*1.0/p);}} printf ("%.3lf\n", ans); }return 0;}
POJ 1018 Discrete Optimization enumeration