对于一家铁路公司,我们可以首先使用 Floyd 算法求出任

意两点 x, y 间只经过属于该家铁路公司铁路的最短路,那么在新

图中我们在 x, y 间加一条 x 到 y 最短路对应的花费为边权的边。

接下来只要在新图中使用 Floyd 算法求出任意两点间的最

小花费就可以了。

跟昨天写的<跑路>有点像

http://blog.csdn.net/kenxhe/article/details/53072146

总结一下, floyd的优势在于可以求出任意两个点之间的距离, 可利用这种特性来构建新图, 解决问题.

代码不是我的, 将就着看吧

#include<cstdio>
#include<cstring>
#include<algorithm> using namespace std;
const int N=1010;
int p[N],q[N][N],r[N][N],f[N][N][21],ans,cost[20010][21];
int n,m,tot,x,y,z,k,kk,s,t,dis[N][N],c[N][N],fa[N]; int fin(int x)
{
if (fa[x]!=x)
fa[x]=fin(fa[x]);
return fa[x];
} int main()
{
memset(f,0x16,sizeof(f));
scanf("%d%d%d%d%d",&n,&m,&k,&s,&t);
for (int i=1;i<=n;i++) fa[i]=i;
for (int i=1;i<=m;i++)
{
scanf("%d%d%d%d",&x,&y,&z,&kk);
f[x][y][kk]=z;
c[x][y]=kk;
f[y][x][kk]=z;
c[y][x]=kk;
int fx=fin(x),fy=fin(y);
if (fx!=fy)
fa[fx]=fy;
} int fs=fin(s),ft=fin(t);
if (fs!=ft)
{
printf("-1\n");
return 0;
} for (int i=1;i<=k;i++)
scanf("%d",p+i);
for (int i=1;i<=k;i++)
{
for (int j=1;j<p[i];j++)
scanf("%d",&q[i][j]);
for (int j=1;j<=p[i];j++)
scanf("%d",&r[i][j]);
} for (int i=1;i<=k;i++)
for (int j=1;j<=20000;j++)
{
int ii,ans=0;
for (ii=1;ii<p[i];ii++)
{
if (j<q[i][ii]) break;
ans+=(q[i][ii]-q[i][ii-1])*r[i][ii];
}
if (j>q[i][ii-1])
ans+=(j-q[i][ii-1])*r[i][ii];
cost[j][i]=ans;
}
for (int cc=1;cc<=k;++cc)
for (int kk=1;kk<=n;kk++)
for (int i=1;i<=n;i++) if (i!=kk)
for (int j=1;j<=n;j++) if (i!=j)
f[i][j][cc]=min(f[i][j][cc],f[i][kk][cc]+f[kk][j][cc]);
// if (c[i][kk]==c[kk][j])
// f[i][j][c[kk][j]]=min(f[i][j][c[kk][j]],f[i][kk][c[i][kk]]+f[kk][j][c[kk][j]]); for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++) if (i!=j)
for (int col=1;col<=k;col++)
if (f[i][j][col]<20000000)
f[i][j][col]=cost[f[i][j][col]][col]; memset(dis,0x16,sizeof(dis));
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++) if (i!=j)
for (int col=1;col<=k;col++)
dis[i][j]=min(dis[i][j],f[i][j][col]); for (int kk=1;kk<=n;kk++)
for (int i=1;i<=n;i++) if (i!=kk)
for (int j=1;j<=n;j++) if (i!=j)
dis[i][j]=min(dis[i][j],dis[i][kk]+dis[kk][j]);
printf("%d\n",dis[s][t]);
}

小W旅游railway的更多相关文章

  1. XidianOJ 1076 小W喜欢的数字

    题目描述 大家都知道,小W是一名大帅哥,当然比起Light还是有点儿差距的!帅气的小W认为0-9这些数字,只有1,3,5是完美的. 欲问小W为什么,小W总是说"帅哥,是不需要解释的" ...

  2. 武汉科技大学ACM :1008: 小t和小w

    Problem Description 小t最近学了C语言,他想要在女朋友小w面前展示一下自己的能力,小w喜欢如样例所示的图形, 想让小t写一个程序来输出这样的图形,小t拿到后感觉有点困难,小t不想在 ...

  3. bzoj4665小w的喜糖 dp+容斥

    4665: 小w的喜糖 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 120  Solved: 72[Submit][Status][Discuss] ...

  4. bzoj4665 小w的喜糖(dp+容斥)

    4665: 小w的喜糖 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 222  Solved: 130[Submit][Status][Discuss ...

  5. bzoj2441【中山市选】小W的问题

    题目描述 有一天,小W找了一个笛卡尔坐标系,并在上面选取了N个整点.他发现通过这些整点能够画出很多个“W”出来.具体来说,对于五个不同的点(x1, y1), (x2, y2), (x3, y3), ( ...

  6. 【BZOJ 4665】 4665: 小w的喜糖 (DP+容斥)

    4665: 小w的喜糖 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 94  Solved: 53 Description 废话不多说,反正小w要发喜 ...

  7. 【BZOJ4665】小w的喜糖 容斥+组合数

    [BZOJ4665]小w的喜糖 Description 废话不多说,反正小w要发喜糖啦!! 小w一共买了n块喜糖,发给了n个人,每个喜糖有一个种类.这时,小w突发奇想,如果这n个人相互交换手中的糖,那 ...

  8. bzoj2441 [中山市选2011]小W的问题(debug中)

    2441: [中山市选2011]小W的问题 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 487  Solved: 186[Submit][Statu ...

  9. 小w的喜糖(candy)

    小w的喜糖(candy) 题目描述 废话不多说,反正小w要发喜糖啦!! 小w一共买了n块喜糖,发给了n个人,每个喜糖有一个种类.这时,小w突发奇想,如果这n个人相互交换手中的糖,那会有多少种方案使得每 ...

随机推荐

  1. leetcode-26-exercise_linked-list

    141. Linked List Cycle Given a linked list, determine if it has a cycle in it. 解题思路: 需要检查before和afte ...

  2. Pond Cascade Gym - 101670B 贪心+数学

    题目:题目链接 思路:题目让求最下面池子满的时间和所有池子满的时间,首先我们考虑所有池子满的时间,我们从上到下考虑,因为某些池子满了之后溢出只能往下溢水,考虑当前池子如果注满时间最长,那么从第一个池子 ...

  3. npm 安装express npm ERR! code UNABLE_TO_VERIFY_LEAF_SIGNATURE

    npm安装总是报错 报错信息: 解决方案: 在命令行输入: npm config set strict-ssl false 设置之后即可安装软件:

  4. HTTP和HTTPS以及两者的区别

    HTTP:是互联网上的应用广泛的一种网络协议,是一个客户端和服务器端请求和应答的传输协议,它可以使浏览器更加高效,使网络传输减少. HTTPS:是以安全为目标的HTTP通道,简单讲是HTTP的安全版, ...

  5. JAVA-基础(二) java.lang

    1.String类提供了许多从String对象中截取字符的方法 1.1 char charAt(int where) 1.2 void getChars(int sourceStart, int so ...

  6. springboot-vue-前后端数据交互

    前端项目: pom文件: <?xml version="1.0" encoding="UTF-8"?> <project xmlns=&quo ...

  7. Java学习笔记3---unable to launch

    环境配置好后,在eclipse下编写HelloWorld程序: ①创建新工程 ②创建.java文件,命名为HelloWorld ③在源文件中添加main方法,代码如下: public void mai ...

  8. webdriver高级应用- 高亮显示正在操作的页面元素

    #encoding=utf-8 import unittest from selenium import webdriver import time def highLightElement(driv ...

  9. Redis 使用多个数据库及密码配置

    redis的默认端口是6379,可以使用的数据库最多有16个,不同数据库之间是独立的, 可以通过 select num 的方式访问不同的数据库 可以通过下面的命令来切换到不同的数据库下,每个数据库都有 ...

  10. Hadoop全分布式模式安装

    一.准备 1.准备至少三台linux服务器,并安装JDK 关闭防火墙如下 systemctl stop firewalld.service systemctl disable firewalld.se ...