bzoj1375 双调路径

Description

来越多,因此选择最佳路径是很现实的问题。城市的道路是双向的,每条道路有固定的旅行时间以及需要支付的费用。路径由连续的道路组成。总时间是各条道路旅行时间的和,总费用是各条道路所支付费用的总和。同样的出发地和目的地,如果路径A比路径B所需时间少且费用低,那么我们说路径A比路径B好。对于某条路径,如果没有其他路径比它好,那么该路径被称为最优双调路径。这样的路径可能不止一条,或者说根本不存在。 给出城市交通网的描述信息,起始点和终点城市,求最优双条路径的条数。城市不超过100个,边数不超过300,每条边上的费用和时间都不超过100。

Input

第一行给出有多少个点,多少条边,开始点及结束点. 下面的数据用于描述这个地图

Output

有多少条最优双调路径

Sample Input

4 5 1 4
2 1 2 1
3 4 3 1
2 3 1 2
3 1 1 4
2 4 2 4

Sample Output

2

HINT

这道题的题面描述有些问题。

只要一条路没有其他路时间比他短并且花费比他少,那么它就是最优双调路径。

我们令dis[i][j]表示走到i点,话费了j元的最小时间(其实你也可以反过来,走到i点,花了j时间的最小话费)

可以得到dis[to][j+v[i]]=max(dis[to][j+v[i]],dis[i][j]+t[i]);

代码如下,细节比较少,很好写。

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <queue>
#include <stack>
#include <vector>
using namespace std;
#define MAXN 100010
#define INF 2139062143
#define MOD 10000007
#define LL long long
#define in(a) a=read()
#define REP(i,k,n) for(int i=k;i<=n;i++)
#define DREP(i,k,n) for(int i=k;i>=n;i--)
#define cl(a) memset(a,0,sizeof(a))
inline int read(){int x=0,f=1;char ch=getchar();for(;!isdigit(ch);ch=getchar()) if(ch=='-') f=-1;for(;isdigit(ch);ch=getchar()) x=x*10+ch-'0';return x*f;
}
inline void out(int x){if(x<0) putchar('-'),x=-x;if(x>9) out(x/10);putchar(x%10+'0');
}
queue <pair<int,int> > Q;
int n,m,sta,des,ans=0,minn=INF;
int dis[110][110*110],vis[110][110*110];
int total=0,head[110],to[1010],nxt[1010],t[1010],v[1010];
inline void adl(int a,int b,int c,int d){total++;to[total]=b;v[total]=c;t[total]=d;nxt[total]=head[a];head[a]=total;return ;
}
inline void SPFA(int s){memset(dis,127,sizeof(dis));dis[s][0]=0;vis[s][0]=1;Q.push(make_pair(s,0));while(!Q.empty()){pair<int,int> k=Q.front();Q.pop();int u=k.first,w=k.second;vis[u][w]=0;for(int e=head[u];e;e=nxt[e]){int nw=w+v[e];if(nw<=10000 && dis[to[e]][nw]>dis[u][w]+t[e]){dis[to[e]][nw]=dis[u][w]+t[e];if(!vis[to[e]][nw]){vis[to[e]][nw]=1;Q.push(make_pair(to[e],nw));}}}}return ;
}
int main(){int a,b,c,d;in(n);in(m);in(sta);in(des);REP(i,1,m){in(a);in(b);in(c);in(d);adl(a,b,c,d);adl(b,a,c,d);}SPFA(sta);REP(i,0,10000)if(dis[des][i]<minn){minn=dis[des][i];ans++;}out(ans);return 0;
}

posted @ 2018-09-12 19:20 Dijkstra·Liu 阅读(...) 评论(...) 编辑 收藏

bzoj1375 双调路径相关推荐

  1. BOI 2002 双调路径

    题目: 城市的道路是双向的,每条道路有固定的旅行时间以及需要支付的费用.路径由连续的道路组成.总时间是各条道路旅行时间的和,总费用是各条道路所支付费用的总和.同样的出发地和目的地,如果路径A比路径B所 ...

  2. P2770 航空路线问题(网络流)

    P2770 航空路线问题 似乎是一个经典的双调路径问题,然后这里使用网络流解决了,本质上要求两条路径没有经过同一个点,并且总长度最大,所以我们实际上可以跑网络流,然后拆点限制路径没有交点.

  3. 《信息学奥赛一本通》提高版题单

    第一部分 基础算法 第 1 章 贪心算法 #10000 「一本通 1.1 例 1」活动安排 #10001 「一本通 1.1 例 2」种树 #10002 「一本通 1.1 例 3」喷水装置 #10003 ...

  4. CLRS第十五章思考题1-4

    思考题15-1 注意到此题是说有向无环图,因此存在动态规划算法计算最长加权简单路径. 设 dis[u]dis[u] 表示从 uu 到 tt 的最长加权简单路径,可以得到如下式子: dis[u]={0m ...

  5. 《算法艺术与信息学竞赛》题目-提交方式对照表 [转]

    id   title how2submit source page 1   盒子里的气球     8 2   图书馆 ural1188   9 3   钓鱼 uva757 pas 13 4   照亮的 ...

  6. LOJ 一本通一句话题解系列:

    第一部分 基础算法 第 1 章 贪心算法 1):「一本通 1.1 例 1」活动安排:按照结束时间排序,然后扫一遍就可以了. 2):「一本通 1.1 例 2」种树:首先要尽量的往区间重叠的部分种树,先按 ...

  7. 求职面试算法总结(感谢用心整理的小伙伴)

    1,strcpy//返回的是目标串的地址,这样支持连续的运算表达式,已测试 char *strcpy(char *strDest, const char *strSrc){//源串一定要const修饰 ...

  8. 一本通提高篇在线提交地址

    一本通提高篇 1 基础算法 1.1 贪心算法 1.1.1 P2018  [第一章例题1.1]活动安排正确: 9 提交: 17 比率: 52.94 % 1.1.2 P2021 [第一章例题1.2]种树正 ...

  9. 双调TSP问题通俗讲解

    欧几里得旅行商问题是对平面上给定的n个点确定一条连接各点的最短闭合旅程的问题,下图a给出了7个点问题的解.这个问题的一般形式是NP完全的,故其解需要多于多项式的时间.                 ...

最新文章

  1. 省委书记表态:以“倾省之力”,支持中国科大建国际校区!
  2. android 类似按键精灵脚本_按键精灵【第一期】教你 0 基础学写脚本 ———— 【金猪教程】...
  3. CRM订单上状态字段在UI的显示逻辑
  4. UNIX网络编程——解决TCP网络传输“粘包”问题
  5. JavaScript之event事件
  6. Redis 6.0 正式版终于发布了!除了多线程还有什么新功能?
  7. .Net 中的序列化与反序列化[概述]
  8. sql server计算日期到当前日期天数_Excel必学的7个计算日期间隔差的技巧
  9. c++ vector向量
  10. movingpandas时空数据分析——旧金山出租车轨迹数据集处理
  11. 我的世界服务器附魔修改器,[娱乐|RPG]NshowEnchant —— 一个简单附魔插件[1.7.10-1.12.2]...
  12. 满分室间质评之GATK Somatic SNV+Indel+CNV+SV(下)性能优化
  13. Mysql中嵌套查询和连接查询的区别
  14. 项目实战:Qt贝塞尔曲线拽托顶点实时显示工具
  15. 1056:点和正方形的关系(C C++)
  16. E: 无法定位软件包 mjepgtools
  17. getline()详解
  18. 【Linux防火墙】iptables基础用法及高级用法
  19. Android车载应用开发与分析(13)- 系统设置-蓝牙设置
  20. 填写运算符判断等式是否成立

热门文章

  1. 博实乐公布季度业绩,前三季度收入增长46.6%
  2. 邮件中html内嵌图片,邮件内嵌html
  3. android 很多牛群叉界面库github地址
  4. 如何合理安排测试团队人员分工的问题?新梦想软件测试
  5. Vue 实现华视身份证读卡器功能
  6. wifi打印服务器方案USB共享打印机模块参考设计
  7. 哔哩哔哩 BV、AV互转 Java版
  8. SDF: Software-defined flash for web-scale internet storage systems
  9. 商业银行业务培训总结
  10. BZOJ2565 回文自动机