USACO 2014 US Open, Silver Problem 2. Dueling GPSs

GPS导航冲突最小化
在一个由N个交点和M条方向性道路组成的地图中,两个GPS系统对每条道路的预估时间不同,任务是找到从家到农场的路径,使因偏离各自最短路径而引起的警告次数最少。

Description

Farmer John has recently purchased a new car online, but in his haste he accidentally clicked the "Submit" button twice when selecting extra features for the car, and as a result the car ended up equipped with two GPS navigation systems! Even worse, the two systems often make conflicting decisions about the route that FJ should take. The map of the region in which FJ lives consists of N intersections (2 <= N <= 10,000) and M directional roads (1 <= M <= 50,000). Road i connects intersections A_i (1 <= A_i <= N) and B_i (1 <= B_i <= N). Multiple roads could connect the same pair of intersections, and a bi-directional road (one permitting two-way travel) is represented by two separate directional roads in opposite orientations. FJ's house is located at intersection 1, and his farm is located at intersection N. It is possible to reach the farm from his house by traveling along a series of directional roads. Both GPS units are using the same underlying map as described above; however, they have different notions for the travel time along each road. Road i takes P_i units of time to traverse according to the first GPS unit, and Q_i units of time to traverse according to the second unit (each travel time is an integer in the range 1..100,000). FJ wants to travel from his house to the farm. However, each GPS unit complains loudly any time FJ follows a road (say, from intersection X to intersection Y) that the GPS unit believes not to be part of a shortest route from X to the farm (it is even possible that both GPS units can complain, if FJ takes a road that neither unit likes). Please help FJ determine the minimum possible number of total complaints he can receive if he chooses his route appropriately. If both GPS units complain when FJ follows a road, this counts as +2 towards the total.

 

PROBLEM NAME:gpsduel

 

INPUT FORMAT:

* Line 1: The integers N and M.

Line i describes road i with four integers: A_i B_i P_i Q_i.

 

SAMPLE INPUT (file gpsduel.in):

5 7

3 4 7 1

1 3 2 20

1 4 17 18

4 5 25 3

1 2 10 1

3 5 4 14

2 4 6 5

 

INPUT DETAILS:

There are 5 intersections and 7 directional roads. The first road connects from intersection 3 to intersection 4; the first GPS thinks this road takes 7 units of time to traverse, and the second GPS thinks it takes 1 unit of time, etc.

 

OUTPUT FORMAT:

* Line 1: The minimum total number of complaints FJ can receive if he routes himself from his house to the farm optimally.

 

SAMPLE OUTPUT (file gpsduel.out):

1

 

OUTPUT DETAILS:

If FJ follows the path 1 -> 2 -> 4 -> 5, then the first GPS complains on the 1 -> 2 road (it would prefer the 1 -> 3 road instead). However, for the rest of the route 2 -> 4 -> 5, both GPSs are happy, since this is a shortest route from 2 to 5 according to each GPS.


 

题目大意(来自洛谷,侵权就让Dreif翻译咯):

  给你一个N个点的有向图,可能有重边.

  有两个GPS定位系统,分别认为经过边i的时间为Pi,和Qi.

  每走一条边的时候,如果一个系统认为走的这条边不是它认为的最短路,就会受到警告一次T T

  两个系统是分开警告的,就是说当走的这条边都不在两个系统认为的最短路范围内,就会受到2次警告.

  如果边(u,v)不在u到n的最短路径上,这条边就受到一次警告,求从1到n最少受到多少次警告。

只需注意一点:当走的边不是当前点到n的最短路径上的边时受到警告;

所以显然: 反向建边 + SPFA*3;

代码:

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<queue>
 5 using namespace std;
 6 
 7 const int maxn = 10000 + 5;
 8 const int maxm = 50000 + 5;
 9 struct Edge
10 {
11     int f, t, v[3];
12 }gra[maxm];
13 int n, m;
14 int fir[maxn], nxt[maxm], dis[maxn], path[maxn];
15 bool used[maxn];
16 queue<int>Q;
17 void SPFA(int);
18 
19 int main()
20 {
21     freopen("gpsduel.in", "r", stdin);
22     freopen("gpsduel.out", "w", stdout);
23     memset(fir, -1, sizeof(fir));
24     scanf("%d%d", &n, &m);
25     for(int i = 1; i <= m; i++)
26     {
27         Edge &tmp = gra[i];
28         scanf("%d%d%d%d", &tmp.t, &tmp.f, &tmp.v[0], &tmp.v[1]);
29         tmp.v[2] = 2;
30         nxt[i] = fir[tmp.f], fir[tmp.f] = i;
31     }
32     SPFA(0);
33     SPFA(1);
34     SPFA(2);
35     printf("%d\n", dis[1]);
36     return 0;
37 }
38 
39 void SPFA(int j)
40 {
41     memset(dis, 0x7f, sizeof(dis));
42     memset(path, 0, sizeof(path));
43     dis[n] = 0;
44     Q.push(n);
45     while(!Q.empty())
46     {
47         int k = Q.front();
48         Q.pop();
49         used[k] = 0;
50         for(int i = fir[k]; ~i; i = nxt[i])
51         {
52             int tmp = gra[i].t;
53             if(dis[tmp] > dis[k] + gra[i].v[j])
54             {
55                 dis[tmp] = dis[k] + gra[i].v[j];
56                 path[tmp] = i;
57                 if(used[tmp]) continue;
58                 Q.push(tmp);
59                 used[tmp] = 1;
60             }
61         }
62     }
63     for(int i = 1; i <= n; i++)
64         gra[path[i]].v[2]--;
65 }

转载于:https://www.cnblogs.com/DreifxP/p/7770710.html

内容概要:本文介绍了一个基于Matlab的综合能源系统优化调度仿真资源,重点实现了含光热电站、有机朗肯循环(ORC)和电含光热电站、有机有机朗肯循环、P2G的综合能源优化调度(Matlab代码实现)转气(P2G)技术的冷、热、电多能互补系统的优化调度模型。该模型充分考虑多种能源形式的协同转换与利用,通过Matlab代码构建系统架构、设定约束条件并求解优化目标,旨在提升综合能源系统的运行效率与经济性,同时兼顾灵活性供需不确定性下的储能优化配置问题。文中还提到了相关仿真技术支持,如YALMIP工具包的应用,适用于复杂能源系统的建模与求解。; 适合人群:具备一定Matlab编程基础和能源系统背景知识的科研人员、研究生及工程技术人员,尤其适合从事综合能源系统、可再生能源利用、电力系统优化等方向的研究者。; 使用场景及目标:①研究含光热、ORC和P2G的多能系统协调调度机制;②开展考虑不确定性的储能优化配置与经济调度仿真;③学习Matlab在能源系统优化中的建模与求解方法,复现高水平论文(如EI期刊)中的算法案例。; 阅读建议:建议读者结合文档提供的网盘资源,下载完整代码和案例文件,按照目录顺序逐步学习,重点关注模型构建逻辑、约束设置与求解器调用方式,并通过修改参数进行仿真实验,加深对综合能源系统优化调度的理解。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值