題意:給出乙個有向圖,每條邊有乙個權值和時間花費。如果圖中無環,輸出0,如果有環,找出乙個最大的環,最大的意思是環上的權和 / 時間和 最大。
如果存在負環,那麼就是原式 tot(time)*k - tot(cost) < 0 成立,找到了乙個解,那麼就可以試著把k調大,因為我們要tot(cost) / tot(time) 最大,這樣就是乙個二分答案的過程
const int maxn = 58 ;
int m , n ;
struct edge
}e[maxn * maxn] ;
const double inf = 1e10 ;
const double eps = 1e-10 ;
vector< pair> lis[maxn] ;
double dist[maxn] ;
int father[maxn] ;
bool in[maxn] ;
int cnt[maxn] ;
int judge(double x)}}
}return 0 ;
}int main()
else r = mid ;
}int u = judge(s) ;
if(u == 0)
memset(cnt , 0 , sizeof(cnt)) ;
vectorans ; ans.clear() ;
while(cnt[u] <= 1)
printf("%d\n" , ans.size()) ;
printf("%d" , ans[ans.size()-1]) ;
for(i = ans.size() -2 ; i >= 0 ; i--) printf(" %d",ans[i]) ;
puts("") ;
}return 0 ;
}