1. 程式人生 > >洛谷 P2053 [SCOI2007]修車

洛谷 P2053 [SCOI2007]修車

小數 truct tdi string front reg 車主 int 時間

題目描述

同一時刻有N位車主帶著他們的愛車來到了汽車維修中心。維修中心共有M位技術人員,不同的技術人員對不同的車進行維修所用的時間是不同的。現在需要安排這M位技術人員所維修的車及順序,使得顧客平均等待的時間最小。

說明:顧客的等待時間是指從他把車送至維修中心到維修完畢所用的時間。

輸入輸出格式

輸入格式:

第一行有兩個數M,N,表示技術人員數與顧客數。

接下來n行,每行m個整數。第i+1行第j個數表示第j位技術人員維修第i輛車需要用的時間T。

輸出格式:

最小平均等待時間,答案精確到小數點後2位。

輸入輸出樣例

輸入樣例#1:
2 2
3 2
1 4
輸出樣例#1:
1.50

說明

(2<=M<=9,1<=N<=60), (1<=T<=1000)

費用流

建好圖 跑模板。

屠龍寶刀點擊就送

#include <ctype.h>
#include <cstring>
#include <cstdio>
#include <queue>
#define M 50005
#define inf 0x7fffffff
using namespace std;
void read(int &x)
{
    x=0;bool
f=0; register char ch=getchar(); for(;!isdigit(ch);ch=getchar()) if(ch==-) f=1; for(;isdigit(ch);ch=getchar()) x=x*10+ch-0; x=f?(~x)+1:x; } struct Edge { int next,to,flow,value; Edge (int next=0,int to=0,int flow=0,int value=0) : next(next),to(to),flow(flow),value(value) {} }edge[M
<<1]; bool vis[M<<1]; int ti[80][80],m,n,head[M<<1],cnt=1,fa[M<<1],dis[M<<1]; void insert(int u,int v,int w,int l) { edge[++cnt]=Edge(head[u],v,w,l); head[u]=cnt; } bool spfa(int s,int t) { for(int i=0;i<=t;i++) {dis[i]=inf;vis[i]=0;} vis[s]=1; dis[s]=0; fa[s]=0; queue<int>q; q.push(s); while(!q.empty()) { int x=q.front(); q.pop(); vis[x]=0; for(int i=head[x];i;i=edge[i].next) { int v=edge[i].to; if(dis[v]>dis[x]+edge[i].value&&edge[i].flow>0) { dis[v]=dis[x]+edge[i].value; fa[v]=i; if(!vis[v]) { vis[v]=1; q.push(v); } } } } return dis[t]<inf; } int dinic(int s,int t) { int cost=0; for(;spfa(s,t);) { int x=dis[t]; for(int i=t;i!=s;i=edge[fa[i]^1].to) { edge[fa[i]].flow-=x; edge[fa[i]^1].flow+=x; } cost+=dis[t]; } return cost; } int main() { read(m); read(n); int s=0,t=n*m+n+1; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) read(ti[i][j]); for(int i=1;i<=m;i++) for(int j=1;j<=n;j++) for(int k=1;k<=n;k++) { insert((i-1)*n+j,n*m+k,1,ti[k][i]*j); insert(n*m+k,(i-1)*n+j,0,-ti[k][i]*j); } for(int i=1;i<=m*n;i++) { insert(s,i,1,0); insert(i,s,0,0); } for(int i=n*m+1;i<t;i++) { insert(i,t,1,0); insert(t,i,0,0); } printf("%.2lf",dinic(s,t)*1.0/n); return 0; }

洛谷 P2053 [SCOI2007]修車