POJ 2391 floyd+二分最大流(二)
ad,sizeof(head)); top=0; ll u=s; while(1) { if(t==u) { ll min=inf; ll loc; for(ll i=0;i
edge[Stack[i]].cap) { min=edge[Stack[i]].cap; loc=i; } for(ll i=0;i
0)break; if(cur[u]!=-1) { Stack[top++]=cur[u]; u=edge[cur[u]].to; } else { if(top==0)break; dep[u]=-1; u=edge[Stack[--top]].from; } } } return res; } ll dist[1000][1000],a[1000],b[1000]; int main() { //freopen("data.in","r",stdin); //freopen("data.out","w",stdout); ll T,t,i,j,k,m,n,p; while(cin>>n>>m) { ll sum=0,left=0,mid,right=0; // cout<<"n,m"<
>a[i]>>b[i],sum+=a[i]; for(i=1;i<=n;i++) for(j=1;j<=n;j++)dist[i][j]=inf; // cout<<"sum="<
>i>>j>>k; if(dist[i][j]>k)dist[i][j]=dist[j][i]=k; } for(k=1;k<=n;k++) for(i=1;i<=n;i++) for(j=1;j<=n;j++) { if(i==j||i==k||j==k)continue; if(dist[i][j]>dist[i][k]+dist[k][j]) dist[i][j]=dist[i][k]+dist[k][j]; if(dist[i][j]!=inf&&right
>1;
memset(head,-1,sizeof(head));tol=0;
for(i=1;i<=n;i++)
{
add(0,i,a[i]);
add(i,i+n,inf);
add(i+n,2*n+1,b[i]);
for(j=1;j<=n;j++)
{
if(i==j)continue;
if(dist[i][j]<=mid)
add(i,j+n,inf);
}
}
ll pp=dinic(0,2*n+1);
//cout<<" mid="<