小W旅游railway

对于一家铁路公司,我们可以首先使用 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的更多相关文章
- XidianOJ 1076 小W喜欢的数字
题目描述 大家都知道,小W是一名大帅哥,当然比起Light还是有点儿差距的!帅气的小W认为0-9这些数字,只有1,3,5是完美的. 欲问小W为什么,小W总是说"帅哥,是不需要解释的" ...
- 武汉科技大学ACM :1008: 小t和小w
Problem Description 小t最近学了C语言,他想要在女朋友小w面前展示一下自己的能力,小w喜欢如样例所示的图形, 想让小t写一个程序来输出这样的图形,小t拿到后感觉有点困难,小t不想在 ...
- bzoj4665小w的喜糖 dp+容斥
4665: 小w的喜糖 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 120 Solved: 72[Submit][Status][Discuss] ...
- bzoj4665 小w的喜糖(dp+容斥)
4665: 小w的喜糖 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 222 Solved: 130[Submit][Status][Discuss ...
- bzoj2441【中山市选】小W的问题
题目描述 有一天,小W找了一个笛卡尔坐标系,并在上面选取了N个整点.他发现通过这些整点能够画出很多个“W”出来.具体来说,对于五个不同的点(x1, y1), (x2, y2), (x3, y3), ( ...
- 【BZOJ 4665】 4665: 小w的喜糖 (DP+容斥)
4665: 小w的喜糖 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 94 Solved: 53 Description 废话不多说,反正小w要发喜 ...
- 【BZOJ4665】小w的喜糖 容斥+组合数
[BZOJ4665]小w的喜糖 Description 废话不多说,反正小w要发喜糖啦!! 小w一共买了n块喜糖,发给了n个人,每个喜糖有一个种类.这时,小w突发奇想,如果这n个人相互交换手中的糖,那 ...
- bzoj2441 [中山市选2011]小W的问题(debug中)
2441: [中山市选2011]小W的问题 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 487 Solved: 186[Submit][Statu ...
- 小w的喜糖(candy)
小w的喜糖(candy) 题目描述 废话不多说,反正小w要发喜糖啦!! 小w一共买了n块喜糖,发给了n个人,每个喜糖有一个种类.这时,小w突发奇想,如果这n个人相互交换手中的糖,那会有多少种方案使得每 ...
随机推荐
- C语言结构体初始化的四种方法(转载)
原文:https://blog.csdn.net/ericbar/article/details/79567108 定义 struct InitMember { int first: double s ...
- 动态规划:Codeforces Round #427 (Div. 2) C Star sky
C. Star sky time limit per test2 seconds memory limit per test256 megabytes inputstandard input outp ...
- HDU 2460 Network 边双连通分量 缩点
题意: 给出一个无向连通图,有\(m\)次操作,每次在\(u, v\)之间加一条边,并输出此时图中桥的个数. 分析: 先找出边双连通分量然后缩点得到一棵树,树上的每条边都输原图中的桥,因此此时桥的个数 ...
- apple苹果产品国行和港行的区别
[iPhone国行和港行的区别]国行:耳机只能用在苹果设备上,不能用其它设备.充电器不用转接,直接可以用,保修的时候如果换新了,重新计算一年保修期.国行是三网通用.港行:耳机可以用在任何设备上.充电器 ...
- tab选项卡不同样式的效果
一般的tab选项卡就只能两种样式,一种是选中或者是划过这个选项卡样式,一种是没选中或者没划过选项卡样式. 现在有这种需求,就是选中或划过tab选卡要不同样式.比如tab1选中或者划过是红色,tab2选 ...
- js 获取data-属性值
].getAttribute('data-price'); 注意 document.getElementsByClassName('1pc_price')后面有[0],不然会报错.
- 【LeetCode】Binary Tree Inorder Traversal(二叉树的中序遍历)
这道题是LeetCode里的第94道题. 题目要求: 给定一个二叉树,返回它的中序 遍历. 示例: 输入: [1,null,2,3] 1 \ 2 / 3 输出: [1,3,2] 进阶: 递归算法很简单 ...
- Educational Codeforces Round 20 C. Maximal GCD
C. Maximal GCD time limit per test 1 second memory limit per test 256 megabytes input standard input ...
- DS博客作业06--图
1.本周学习总结 1.1.思维导图 1.2.谈谈你对图结构的认识及学习体会 本章学习了图结构的相关知识,图形结构属于复杂的非线性数据结构,在实际应用中很多问题可以用图来描述.在图结构中,每个元素可以有 ...
- POJ——1195Mobile phones(二维树状数组点修改矩阵查询)
Mobile phones Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 17764 Accepted: 8213 De ...