void buildgraph() { for(int i=1;i<=M;i++) scanf("%d",&pig_num[i]); S=0;T=N+1;Num=T+1; g.ClearAll(Num); memset(hash,0,sizeof(hash)); for(int i=1;i<=N;i++) { int Qnum; scanf("%d",&Qnum); for(int j=1;j<=Qnum;j++) { int a; scanf("%d",&a); if(hash[a]==0) { g.AddEdge(S,i,pig_num[a]); hash[a]=i; }else { g.AddEdge(hash[a],i,INF); } } scanf("%d",&people_need[i]); } for(int i=1;i<=N;i++) g.AddEdge(i,T,people_need[i]); }
double buildgraph(double mid) { g.ClearAll(Num); for(int i=1;i<=N;i++) { g.AddEdge(S,i,M+0.0); g.AddEdge(i,T,M+2*mid-degree[i]); } for(int i=1;i<=M;i++) { int u=path[i].u; int v=path[i].v; g.AddEdge(u,v,1.0); g.AddEdge(v,u,1.0); } double floow=g.MaxFlow(S,T); return (M*N-floow)/2; }
bool judge(double mid) { double ans=0; g.ClearAll(Num); for(int i=1;i<=M;i++) { if(data[i].d<=mid) ans+=data[i].d-mid; else { g.AddEdge(data[i].u,data[i].v,data[i].d-mid); g.AddEdge(data[i].v,data[i].u,data[i].d-mid); } } ans+=g.MaxFlow(S,T); if(ans>=0/*||fabs(ans-0)<=eps*/) { return true; } return false; }