题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1070

后面还有几辆车在这个人这儿修,自己这辆车的时间对总时间的贡献就要多乘上几倍。

所以可以费用流。每辆车向每个人连 n 条边,费用依次为 d , 2*d , 3*d …… 表示自己后面有几辆车。

对于一个人来说,还要限制走 k*d 这条边的一共只能有一辆车。只需要将一个人拆成 n 个点,每个点向汇点连容量为1的边就行了。

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<algorithm>
  4. #include<queue>
  5. using namespace std;
  6. int rdn()
  7. {
  8. int ret=;bool fx=;char ch=getchar();
  9. while(ch>''||ch<''){if(ch=='-')fx=;ch=getchar();}
  10. while(ch>=''&&ch<='')ret=ret*+ch-'',ch=getchar();
  11. return fx?ret:-ret;
  12. }
  13. int Mn(int a,int b){return a<b?a:b;}
  14. const int N=,M=,INF=;
  15. int n,m,t,hd[N],xnt=,cur[N],to[M],nxt[M],cap[M],w[M];
  16. int dis[N],pre[N],info[N],ans; bool ins[N];
  17. queue<int> q;
  18. void add(int x,int y,int z)
  19. {
  20. to[++xnt]=y;nxt[xnt]=hd[x];hd[x]=xnt;cap[xnt]=;w[xnt]=z;
  21. to[++xnt]=x;nxt[xnt]=hd[y];hd[y]=xnt;cap[xnt]=;w[xnt]=-z;
  22. }
  23. bool spfa()
  24. {
  25. memset(dis,0x3f,sizeof dis);dis[]=;
  26. info[]=INF;info[t]=;
  27. q.push();ins[]=;
  28. while(q.size())
  29. {
  30. int k=q.front();q.pop();ins[k]=;
  31. for(int i=hd[k],v;i;i=nxt[i])
  32. if(cap[i]&&dis[v=to[i]]>dis[k]+w[i])
  33. {
  34. dis[v]=dis[k]+w[i];
  35. pre[v]=i; info[v]=Mn(info[k],cap[i]);
  36. if(!ins[v])q.push(v),ins[v]=;
  37. }
  38. }
  39. return info[t];
  40. }
  41. void ek()
  42. {
  43. int s=info[t];
  44. for(int i=pre[t];i;i=pre[to[i^]])
  45. {
  46. ans+=s*w[i];cap[i]-=s;cap[i^]+=s;
  47. }
  48. }
  49. int main()
  50. {
  51. scanf("%d%d",&m,&n);int ct=n*m; t=ct+n+;
  52. for(int i=,x=ct+,d;i<=n;i++,x++)
  53. for(int j=,y=;j<=m;j++,y++)
  54. {
  55. d=rdn();
  56. for(int k=,lj=d;k<=n;k++,lj+=d,y++)
  57. add(x,y,lj);
  58. }
  59. for(int i=,x=ct+;i<=n;i++,x++)add(,x,);
  60. for(int i=;i<=ct;i++)add(i,t,);
  61. while(spfa())ek();
  62. printf("%.2f\n",(double)ans/n);
  63. return ;
  64. }

bzoj 1070 [SCOI2007]修车——网络流(拆边)的更多相关文章

  1. bzoj 1070: [SCOI2007]修车 费用流

    1070: [SCOI2007]修车 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 2785  Solved: 1110[Submit][Status] ...

  2. BZOJ 1070: [SCOI2007]修车 [最小费用最大流]

    1070: [SCOI2007]修车 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 4936  Solved: 2032[Submit][Status] ...

  3. bzoj 1070 [SCOI2007]修车(最小费用最大流)

    1070: [SCOI2007]修车 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 3515  Solved: 1411[Submit][Status] ...

  4. [BZOJ 1070] [SCOI2007] 修车 【费用流】

    题目链接:BZOJ - 1070 题目分析 首先想到拆点,把每个技术人员拆成 n 个点,从某个技术人员拆出的第 i 个点,向某辆车连边,表示这是这个技术人员修的倒数第 i 辆车.那么这一次修车对整个答 ...

  5. BZOJ 1070: [SCOI2007]修车(费用流)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1070 题意: 思路: 神奇的构图. 因为排在后面的人需要等待前面的车修好,这里将每个技术人员拆成n个 ...

  6. bzoj 1070 [SCOI2007]修车

    最小费用最大流. 将每个技术人员拆成车数个点,技术人员i的第j个点代表技术人员i修的倒数第j辆车. 源点向所有技术人员点连一条容量为1费用为0的边. 所有技术人员点向所有车点连边:技术人员i的第j个点 ...

  7. BZOJ.1070.[SCOI2007]修车(费用流SPFA)

    题目链接 /* 神tm看错题*2.. 假如人员i依次维修W1,W2,...,Wn,那么花费的时间是 W1 + W1+W2 + W1+W2+W3... = W1*n + W2*(n-1) + ... + ...

  8. 【刷题】BZOJ 1070 [SCOI2007]修车

    Description 同一时刻有N位车主带着他们的爱车来到了汽车维修中心.维修中心共有M位技术人员,不同的技术人员对不同的车进行维修所用的时间是不同的.现在需要安排这M位技术人员所维修的车及顺序,使 ...

  9. bzoj 1070: [SCOI2007]修车【最小费用最大流】

    一开始从客人角度想的,怎么建都不对 从一个修车工所接待的所有顾客花费的总时间来看,设一共有x个人,那么第一个修的对总时间的贡献是x*w1,第二个是(x-1)*w2-以此类推.所以把第i个修车工拆成n组 ...

随机推荐

  1. [MyEclipse]转:设置注释格式

    Window --> Java --> Code Style --> Code Templates --> Comments --> types --> Edit ...

  2. python - pandas或者sklearn中如何将字符形式的标签数字化

    参考:http://www.php.cn/wenda/91257.html https://www.cnblogs.com/king-lps/p/7846414.html http://blog.cs ...

  3. Metasploit没有db_autopwn命令的解决办法

    将附件db_autopwn.rp 拷贝到/opt/framework3/msf3/plugins/PS:db_autopwn.rp 下载地址:http://dl.vmall.com/c04w8czlc ...

  4. nyoj——113 getline

    字符串替换 时间限制:3000 ms  |  内存限制:65535 KB 难度:2   描述 编写一个程序实现将字符串中的所有"you"替换成"we"   输入 ...

  5. Symmetrical Network Acceleration with EBS 12

    Andy Tremayne, my esteemed colleague and fellow blogger, has published a new whitepaper that discuss ...

  6. ansible modules开发(二)

    四 使用其他语言发开module cd /etc/ansible cat library/touch.sh #!/bin/sh args_file=$1 [ ! -f "$args_file ...

  7. Hessian序列化

    当子类定义了和父类同名的属性时,经过hessian传输,会导致该属性值丢失.因为hessian发送二进制数据时,子类数据在前,父类数据在后.接收二进制数据时,子类数据在前,父类数据在后.所以对于同名字 ...

  8. Java开发微信公众号模板消息【同步|异步】

    第一步:申请模板消息功能并添加模板 在微信公众平台找到你需要的模板,并添加上即可: 第二步:添加功能模块后开始开发 功能中使用的类及代码: 发送数据主实体类: Template.java packag ...

  9. 015PHP基础知识——流程控制(三)

    <?php /** *流程控制(三) */ /* 循环结构: while(){ } */ //设置脚本最长执行时间:100秒 //set_time_limit(100); $lantian = ...

  10. Attach to process 的问题

    Attach to process找不到W3WP选项怎么办?刷新它的一个网页