最小费用最大流。

建图,把从第i个目的点到到第i+1个目的点视为一个点,作为二分图的X部,源点连流量1费用0的边。把第i辆车视为Y部,向汇点连流量1费用0的边,表示用第i辆车。Y部外加一个点,表示走路,向汇点连接流量无穷,费用0的边。X,Y部之间建边,如果从第i个目的点到i+1个目的点用第j辆车,就建立费用为从i走到j加上j到i+1开车的费用即可。连走路的点直接是走过去的费用。跑最小费用最大流就是解。

#include <bits/stdc++.h>
#define maxn 509
#define maxm 2000009
using namespace std;
const int INF=1e9;
struct Edge
{int v,cap,cost,next;
}edge[maxm];
int head[maxn],tot,n,src,des;
int d[maxn],q[maxn],inq[maxn],pre[maxn],dis[maxn][maxn];
int flow,cost;
inline void addedge(int u,int v,int cap,int cost)
{edge[tot].v=v;edge[tot].cap=cap;edge[tot].cost=cost;edge[tot].next=head[u];head[u]=tot++;edge[tot].v=u;edge[tot].cap=0;edge[tot].cost=-cost;edge[tot].next=head[v];head[v]=tot++;
}
void init()
{memset(head,-1,sizeof(head));tot=flow=cost=0;
}
bool spfa()
{int h=0,t=0;for(int i=0;i<=n;i++){d[i]=INF;}d[src]=0;q[t++]=src;while(h!=t){int u=q[h++];h%=maxn;inq[u]=0;for(int e=head[u];e!=-1;e=edge[e].next){int v=edge[e].v;if(edge[e].cap&&d[v]>d[u]+edge[e].cost){d[v]=d[u]+edge[e].cost;pre[v]=e;if(!inq[v]){inq[v]=1;q[t++]=v;t%=maxn;}}}}return d[des]!=INF;
}
void end()
{int u,e,mi=INF;for(u=des;u!=src;u=edge[e^1].v){e=pre[u];mi=min(mi,edge[e].cap);}for(u=des;u!=src;u=edge[e^1].v){e=pre[u];edge[e].cap-=mi;edge[e^1].cap+=mi;cost+=mi*edge[e].cost;}flow+=mi;
}
class SlimeXGrandSlimeAuto
{
public:
int travel(vector <int> cars, vector <int> a, vector <string> roads, int walk, int drive){int num=roads.size();init();for(int i=0;i<num;i++){for(int j=0;j<num;j++){if(i==j)dis[i][j]=0;else{if(roads[i][j]>='0'&&roads[i][j]<='9')dis[i][j]=roads[i][j]-'0'+1;else if(roads[i][j]>='a'&&roads[i][j]<='z')dis[i][j]=roads[i][j]-'a'+11;else if(roads[i][j]>='A'&&roads[i][j]<='Z')dis[i][j]=roads[i][j]-'A'+37;elsedis[i][j]=INF;}}}for(int k=0;k<num;k++)for(int i=0;i<num;i++)for(int j=0;j<num;j++)dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);int N=a.size(),M=cars.size()+1;src=0;des=N+M+1;n=des+1;for(int i=1;i<=N;i++){addedge(src,i,1,0);}for(int i=1;i<=M;i++){if(i==M)addedge(i+N,des,INF,0);elseaddedge(i+N,des,1,0);}for(int i=1;i<=N;i++){for(int j=1;j<=M;j++){if(j==M){if(i==1){addedge(i,N+j,1,dis[0][a[i-1]]*walk);}else{addedge(i,N+j,1,dis[a[i-2]][a[i-1]]*walk);}}else{if(i==1){addedge(i,N+j,1,dis[0][cars[j-1]]*walk+dis[cars[j-1]][a[i-1]]*drive);}else{addedge(i,N+j,1,dis[a[i-2]][cars[j-1]]*walk+dis[cars[j-1]][a[i-1]]*drive);}}}}while(spfa())end();//cout<<flow<<endl;return cost;}
};

Single Round Match 506 Round 1 - Division I, Level Two SlimeXGrandSlimeAuto相关推荐

  1. mysql四舍五入函数取两位小数_MySQL四舍五入函数ROUND(x)、ROUND(x,y)和TRUNCATE(x,y)

    MySQL四舍五入函数ROUND(x) ROUND(x)函数返回最接近于参数x的整数,对x值进行四舍五入. 实例: 使用ROUND(x)函数对操作数进行四舍五入操作.SQL语句如下: mysql> ...

  2. python round函数_Python round() 函数

    这个一直都想写,但是因为这个点比较小,所以一直懒得动手.不过还是补上吧,留着早晚是个祸害. round函数很简单,对浮点数进行近似取值,保留几位小数.比如 >>> round(10. ...

  3. round在python是什么意思_python – round()和numpy.round()之间的底层差异是什么?

    让我们看一下令人震惊的圆形声明: >>> round(2.675, 2) 2.67 我知道为什么围绕"失败";这是因为2.675的二进制表示: >>& ...

  4. java round,java中round方法舍入问题

    Math.round()是java中非常常用的一个方法,用来取整舍入,但使用时发现有不同的舍入结果 既不完全是 四舍五入 ,也不是所谓的 银行家舍入 而是 返回最接近它的整数,若有两个返回接近的整数, ...

  5. oracle round负数,oracle Round函数用法

    Round函数用法: 截取数字 格式如下:ROUND(number[,decimals]) 其中:number 待做截取处理的数值 decimals 指明需保留小数点后面的位数.可选项如果不指定则默认 ...

  6. SRM 721 DIV2

    Single Round Match 721 Round 1 - Division II, Level One 代码如下: public class FlightDataRecorder {publi ...

  7. ACM比赛经验、刷题记录及模板库总结(更新中)

    前言 本文所提及的部分题目代码,可以在我的Github上找到 第一部分 经验分享及感受 第二部分 刷题记录 一.基础算法&程序语言 //strlen()函数的复杂度是O(n)要小心 //截取字 ...

  8. 网络流题集【夏天的风】

    [HDU] 1532Drainage Ditches(基础)    [最大流] 3549 Flow Problem(基础)    [最大流] 3572 Task Schedule    [最大流]任务 ...

  9. 四舍五入函数round_如何在R中使用round()将数字四舍五入

    四舍五入函数round Rounding off the numbers can be achieved with round() in R. Round is one of the best way ...

最新文章

  1. 剑指offer 40.最小的 K 个数 python代码
  2. GitHub 热榜:来膜拜这个流弊的 AI 框架!
  3. 在Android应用中使用Pull解析XML文件(传智播客视频笔记)
  4. QuickWAP V1.5利用ASP读取Access记录集一例
  5. oracle+视图+图形化,如何利用Object Browser图形化工具提高Oracle开发工作效率(二)对象创建管理篇...
  6. 五款优秀免费的在线抠图工具
  7. 计算机网络与通信第二版复习,自学考试计算机网络与通信笔记第二章
  8. 基于JavaWeb网上商城(以卖书为主)
  9. RRU原理详解以及eCPRI+Low-Phy(一篇文章让你搞懂RRU---呕心沥血之作)
  10. iphone/ipad 连接smb服务器,实现局域网内文件共享
  11. 18套桁架机械手双轴/图纸龙门架机器人SolidWorks3D模型设计图纸
  12. 大疆创新2014年校园招聘笔试题(嵌入式类)
  13. 拉伯证券|社会消费复苏将是2023年主旋律
  14. 【pion】ice-single-port解析
  15. 钱钟书是怎样做读书笔记的 杨绛
  16. 独立思考的迷失很可怕!!!
  17. Jarvis oj level3
  18. 2021年腾讯云618活动最新优惠攻略
  19. 为什么HashMap中链表转红黑树的阀值是8?
  20. html5class命名规范,开发过程中应该遵守哪些编码规范和class命名规范?

热门文章

  1. 网站有上传后门木马的漏洞怎么解决
  2. 前端类库开发最佳实践
  3. 地理围栏 | EXCEL表格中分析轨迹坐标是否在设定的围栏范围内
  4. 有财学院http://www.godgold.com/learn/title_asp/index.html
  5. 【力扣】买卖股票的最佳时机 II
  6. 程序员最全进阶资源免费送
  7. 周鸿祎:360 基本不触碰用户数据;苹果与亚马逊被指控合谋推高 iPhone 等产品价格|极客头条
  8. Latex单行/多行公式居中/左对齐
  9. 经典排序算法学习笔记二——快速排序
  10. 高考数学考用计算机求函数吗,高考数学52种快速做题方法整理!再也不用担心考试时间不够了...