P3106 [USACO14OPEN] Dueling GPSs S —— 最短路 图论

news/2024/11/29 11:20:11/文章来源:https://www.cnblogs.com/Glowingfire/p/18576200

[USACO14OPEN] Dueling GPSs S

题面翻译

Farmer John 最近在网上购买了一台新车,然而当他给这台新车挑选额外设备时他不小心快速地点击了“提交” 按钮两次,因此这台新车配备了两台 GPS 导航系统!更糟糕的是,两台系统对 Farmer John 的出行路线经常做出相互冲突的决定。

Farmer John 居住的区域包含 \(N\) 个结点(\(2 \le N \le 10000\))和 \(M\) 条有向道路(\(1 \le M \le 50000\))。第 \(i\) 条道路从 \(A_i\) 连向 \(B_i\)\(1 \le A_i, B_i \le N\))。多条道路可能连接同样一对结点,而一条双向道路是由两条单独的反向的道路来表示的。 Farmer John 的家在结点 \(1\),他的农场在结点 \(N\)。数据保证从家出发经过一系列有向道路可以到达农场。

两台 GPS 系统的内置地图都如上所描述。然而,它们对通过每条道路所需时间的预计是不同的。第一台和第二台 GPS 系统预测通过道路 \(i\) 需要花费的时间分别为 \(P_i\)\(Q_i\) 个单位时间(通过每条道路所需时间是一个在 \([1, 10^5]\) 内的整数)。

Farmer John 想要从他的家去往农场。然而,当 Farmer John 通过了一条道路(假设是从 \(X\)\(Y\)),而一台 GPS 系统认为这条道路不是从 \(X\) 前往农场的最短路径中的一部分时,这台 GPS 系统就会大声抱怨(如果两台 GPS 系统都认为该条道路都不是最短路径的一部分时,两台系统会同时抱怨)。

请帮助 Farmer John 求出,如果 Farmer John 合理地选择出行路线,两台 GPS 系统抱怨次数总和的最小值。如果 Farmer John 通过了一条路时两台 GPS 系统同时抱怨,那么抱怨次数增加 \(2\)

题目描述

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.

输入格式

* Line 1: The integers N and M.

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

输出格式

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

样例 #1

样例输入 #1

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

样例输出 #1

1

提示

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.

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.

分析

建反图,用spfa求出终点到其他点的最短路。

然后枚举每条边,对于 $ dis[u] + e[i].z == dis[v] $ 的边打标记,为 $ GPS_1 / GPS_2 $ 的最短路径。

最后在原图上跑spfa。

#include<bits/stdc++.h>
using namespace std;
const int N=1e4+100,M=5e5+100,INF=2e9;
struct edge{int x,y,n,sp[2];}e[M<<1],t[M<<1];
int n,m;
int head[N],cnt;
int dh[N],tot;
int dis[5][N],q[M],len1,len2;
int pre[2][M];
bool vis[N];
void init()
{scanf("%d%d",&n,&m);for(int i=1,x,y,sp1,sp2;i<=m;++i){scanf("%d%d%d%d",&x,&y,&sp1,&sp2);++cnt;e[cnt].n=head[x];e[cnt].y=y;e[cnt].sp[0]=sp1;e[cnt].sp[1]=sp2;head[x]=cnt;++tot;t[tot].n=dh[y];t[tot].y=x;t[tot].sp[0]=sp1;t[tot].sp[1]=sp2;dh[y]=tot;}
}void sp(int op,edge e[],int st,int head[])
{int he=1,ta=0;for(int i=1;i<=n;++i)dis[op][i]=INF;dis[op][st]=0;q[++ta]=st;while(he<=ta){int u=q[he++];vis[u]=0;for(int i=head[u];i;i=e[i].n){int v=e[i].y;if(dis[op][v]>dis[op][u]+e[i].sp[op]){dis[op][v]=dis[op][u]+e[i].sp[op];if(!vis[v]){vis[v]=1;q[++ta]=v;}}}}}
void go(int op)
{int he=1,ta=0;for(int i=1;i<=n;++i)dis[op][i]=INF;dis[op][1]=0;q[++ta]=1;while(he<=ta){int u=q[he++];vis[u]=0;for(int i=head[u];i;i=e[i].n){int v=e[i].y;int val=2-pre[0][i]-pre[1][i];if(val+dis[op][u]<dis[op][v]){dis[op][v]=val+dis[op][u];if(!vis[v]){vis[v]=1;q[++ta]=v;}}}}
}
void loading()
{for(int i=1;i<=n;++i){int num1=INF,num2=INF;for(int j=head[i];j;j=e[j].n){int v=e[j].y;num1=min(num1,dis[0][v]+e[j].sp[0]);num2=min(num2,dis[1][v]+e[j].sp[1]);}for(int j=head[i];j;j=e[j].n){int v=e[j].y;if(num1==dis[0][v]+e[j].sp[0])pre[0][j]=1;if(num2==dis[1][v]+e[j].sp[1])pre[1][j]=1;}}
}
void work()
{sp(0,t,n,dh);sp(1,t,n,dh);loading();go(2);cout<<dis[2][n];
}int main()
{init();work();return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/843343.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

hhdb数据库介绍(9-24)

计算节点参数说明 failoverAutoresetslave 参数说明:Property Value参数值 failoverAutoresetslave是否可见 是参数说明 故障切换时,是否自动重置主从复制关系默认值 falseReload是否生效 否参数设置: <property name="failoverAutoresetslave">false</p…

“4个应用场景”以图搜图与实物比对,赋能机械制造智能化升级

背景 随着制造业和工业生产的不断发展,机械设计和加工过程中的图纸与实物比对成为生产质量管控的重要环节。然而,传统手动比对方式耗时费力,且易出现误差。思通数科凭借自主研发的大模型技术,为用户提供了一套高效、智能的以图搜图与实物比对解决方案,大幅提升了机械设计和…

校园防欺凌ai语音监控系统

校园防欺凌ai语音监控系统核心优势在于其先进的音频识别算法,校园防欺凌ai语音监控系统能够识别出关键词如侮辱、恐吓、求救等敏感语言,并能够区分正常的交流和潜在的欺凌行为。系统通过安装在校园各关键区域的麦克风捕捉声音信号,这些信号会被实时传输到中央处理单元。在这…

hhdb数据库介绍(9-18)

SQL语法支持 计算节点语法特殊功能 默认分片规则建表 在使用关系集群数据库时,需要先将表的分片规则信息配置好之后才能创建表。实际使用过程中,用户可能对关系集群数据库及分片规则不了解,这就需要一种能直接过渡到HHDB Server的方案,该方案能根据逻辑库关联的分片节点数量…

Windows Cmd查询端口号对应的进程及关闭进程

Windows Cmd查询端口号对应的进程及关闭进程 1. 使用 netstat 查询端口和进程信息 运行以下命令: netstat -ano | findstr :端口号示例: 如果要查询端口 80812. 查找进程 ID 所属的程序 通过上面命令的输出获取到 PID(进程 ID)后,可以使用以下命令查看对应的程序名称: ta…

hhdb数据库介绍(9-16)

SQL语法支持 事务管理与锁语句语句类型 事务语句 语句参数 状态 说明事务管理 START TRANSACTION 无参数 支持WITH CONSISTENT SNAPSHOT 支持READ WRITE 支持READ ONLY 支持BEGIN支持COMMIT支持COMMIT [AND [NO] CHAIN] [[NO] RELEASE] 支持ROLLBACK支持ROLLBACK [AND [NO] CHA…

MySQL_索引失效_类型转换

1.类型转换索引失效场景SELECT * FROM tbl_name WHERE str_col=1; 列str_col上有建立索引,一个字符串类型的列给一个整数类型的值。 问题:为什么会导致索引失效? 原因:MySQL官方文档解释:The reason for this is that there are many different strings that may convert …

Thinkpad X1 Tablet gen2 键盘改USB

0 写在前面 前文Thinkpad X1 Tablet gen2 键盘固件逆向实现Ctrl与Fn换位记录了Thinkpad X1 Tablet gen2 键盘Fn和Ctrl换位的研究过程,本文记录一下该键盘改USB的过程。因为操作的时候没有留太多照片,所以尽量画图示意。 0.1 其他网友硬改成果 在硬改该键盘之前,在网上发现其…

2024年不同行业都适用的10款项目管理工具推荐,总有一款适合你!

在当今快节奏的商业环境中,项目管理工具的选择对于项目的成功至关重要。不同的行业和项目类型需要不同的工具来满足其特定的需求。本文将介绍10款适用于不同行业的项目管理工具,帮助您在2024年找到最适合您项目的解决方案。 禅道项目管理软件 禅道项目管理软件是一款开源的项…

多模态遥感技术:智慧城市更新与表达的新路径

随着智慧城市建设的不断深入,多模态航空遥感技术正成为推动城市智慧化的关键力量。多模态航空遥感通过集成多种传感器和数据源,提供了丰富的地表信息,极大地提升了城市空间数据的准确性和应用价值。多模态航空遥感技术多模态航空遥感技术利用多种传感器,如全色相机、多光谱…

H5-9 表格

1、表格展示效果表格在数据展示方便面非常简单,并且表现优秀 2、表格组成与特点 行、列、单元格 单元格特点:通行等高、同列等宽。 3、表格标签表格:<table>行:<tr>列:<td> <table><tr><td>1</td><td>1</td>&l…

带CSS3动画效果的炫酷jquery返回顶部插件

gototop是一款轻量级、简单易用的jquery返回顶部插件。该jquery返回顶部插件在用户向下滚动页面一段距离之后,会以CSS3动画方式出现返回顶部按钮。点击返回顶部按钮之后,页面以平滑的方式滚动回顶部。在线演示 下载使用方法 在页面中引入jquery、jquery.gototop.min.js文件。…