USACO2014OPEN导航竞争(silverT2)

导航竞争{silver题2} 

【问题描述】

农民约翰的汽车安装的两个导航仪在选择路线时经常出现冲突。

他居住区域的地图上有N(2 <= N <= 10,000)个结点和M(1 <= M <= 50,000)条有向边,边i连接节点A_i (1 <= A_i <= N) 和 B_i (1 <= B_i <= N)。两个结点之间可能有多条有向边。约翰的家住在结点1,他的农场在结点N。

两个导航仪使用同一份地图,但是对一同一条边,他们标注为不同驾驶时间。对于边i, i第一个导航仪标注P_i的时间,第二个导航仪标注Q_i的时间,皆为[1..100,000]的整数。

约翰开车从家里出发去他的牧场,每当他经过一条边的时候,比如从结点X到结点Y,若某个导航仪认为这不是从结点X到农场的最短路径上的一部分的时候,就会产生抱怨。若两个导航仪都不认为,则都会产生抱怨。

请帮助约翰找到一条合适的路径,使得在他的行程中,两个导航仪抱怨的次数最少。若在经过某条边时,两个导航仪均抱怨,则抱怨次数加2。

【文件输入】gpsduel.in

第一行两个整数N和M。

接下来M行,每行四个整数,分别表示A_i, B_i ,P_i, Q_i。

【文件输出】gpsduel.out

一行,一个整数,表示最少的抱怨次数。

【输入样例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

【样例1说明】

如果约翰选择的路径是1 - >2 - >4 - >5,则第一导航抱怨1 - >2路(它宁愿用1 - >3路代替)。对于其余的2 - >4 - >5,这两个导航都不会抱怨。

把bao数组的初始值赋为2,表示每条边被抱怨的次数。

首先把所有的边反过来,分别用p,q数组作为权值求N点到各点的最短路。

在求最短路的过程中,记下到某一结点的最短路径中直接与该结点相连的那条路(仅有一条)。

然后dec这些边的bao值。

最后从N点开始再求一次最短路。

dist[1]就是要求的答案。

(1500ms+的时间还是太弱了,最短路的算法需要优化。

SPFA应该会强一点。)

(不过既然会写SPFA就懒得重新打一遍最短路了)

var list,dist,start,finish,u,v,q,p,bao:array[0..100000] of longint;
      temp,tip,num,n,m,i:longint;
      used:array[0..50000] of boolean;
     st:array[0..50000] of string;
     use:array[0..100000] of string;

procedure qsort(a,b:longint);
var i,j,x,temp:longint;
begin
i:=a;
j:=b;
x:=u[(i+j) div 2];
repeat
 while u[i]<x do inc(i);
 while u[j]>x do dec(j);
 if i<=j then begin
  temp:=u[i];
  u[i]:=u[j];
  u[j]:=temp;
  temp:=v[i];
  v[i]:=v[j];
  v[j]:=temp;
  temp:=p[i];
  p[i]:=p[j];
  p[j]:=temp;
  temp:=q[i];
  q[i]:=q[j];
  q[j]:=temp;
  inc(i);
  dec(j);
  end;
until i>j;
if i<b then qsort(i,b);
if j>a then qsort(a,j);
end;

procedure deal;
var i,now:longint;
begin
start[u[1]]:=1;
now:=u[1];
for i:=2 to m do
 if u[i]<>now then
  begin
   finish[now]:=i-1;
   now:=u[i];
   start[now]:=i;
  end;
 finish[now]:=m;
end;

procedure dijkstra;
var i,j,min,pos,num,mm:longint;
       tip:string;
begin
for i:=1 to n do dist[i]:=maxlongint;
dist[n]:=0;
fillchar(used,sizeof(used),false);
for i:=1 to n-1 do
 begin
  min:=maxlongint;
  for j:=1 to n do
   if not used[j] then
    if dist[j]<min then
     begin
      min:=dist[j];
      pos:=j;
     end;
  used[pos]:=true;
  for j:=start[pos] to finish[pos] do
   if dist[pos]+p[j]<dist[v[j]] then
    begin
     dist[v[j]]:=dist[pos]+p[j];
     list[v[j]]:=j;
    end;
 end;
for i:=1 to n-1 do dec(bao[list[i]]);
end;

procedure dijkstra1;
var i,j,pos,min:longint;
begin
for i:=1 to n do dist[i]:=maxlongint;
dist[n]:=0;
fillchar(used,sizeof(used),false);
for i:=1 to n-1 do
 begin
  min:=maxlongint;
  for j:=1 to n do
   if not used[j] then
    if dist[j]<min then
     begin
      min:=dist[j];
      pos:=j;
     end;
    used[pos]:=true;
  for j:=start[pos] to finish[pos] do
   if dist[pos]+bao[j]<dist[v[j]] then
    dist[v[j]]:=dist[pos]+bao[j];
 end;
end;

begin
//assign(input,‘silver2.in‘);
//assign(output,‘silver2.out‘);
//reset(input);
//rewrite(output);
readln(n,m);
for i:=1 to m do
  readln(u[i],v[i],p[i],q[i]);
for i:=1 to m do
 begin
  temp:=u[i];
  u[i]:=v[i];
  v[i]:=temp;
 end;
qsort(1,m);
deal;
for i:=1 to m do bao[i]:=2;

dijkstra;
for i:=1 to m do p[i]:=q[i];
dijkstra;
dijkstra1;
writeln(dist[1]);

//close(input);
//close(output);
end.

(其实刚开始我把最短路径的每一条边都记下来了,

感谢YHZ的提醒……毕竟我们刚开始理解错的方式如出一辙。)

时间: 2024-08-18 18:20:19

USACO2014OPEN导航竞争(silverT2)的相关文章

网址导航行业分析:互联网“新门户路人皆知(www.lurenjiezhi.com)”横空出世

网址导航作为与搜索引擎.即时通讯并列的三大上网入口,已成为很多网民上网的第一站.网址导航也由最初的单纯提供网站站点功能,逐渐发展为综合型的上网门户,随着资源整合优势的凸显,网址导航的资源整合能力越来越强,离用户的距离也越来越近,整个网址导航行业已经迎来了新一轮成长的机会,甚至大有取代传统门户网站的趋势. 路人皆知(点击打开链接)网址导航发展稳健,稳居行业前五 路人皆知网址导航是近几年才崛起的导航网站,并凭着出色的用户体验和对产品的微创新,稳居行业前五名.根据艾瑞2013年最新的数据显示,搜 狗网

结对开发项目~校园导航

我们团队开发的是<校园导航> (1)N(Need需求) 最近学校新增加了许多国外交换生,以及介于很多同学对于学校的公共设施并不是那么了解,所以校园助手便应运而生 (2)A(Approach做法) 以前小学期有做过类似的项目,可以利用以前积累起来的经验进行改进 (3)B(Benefit好处) 便于同学老师以及游客利用手上最方便的导航工具来进行导航,去到自己想去的地方 (4)C(Competitors竞争) 目前好像没有小组做的一样的东西,而市面上例如百度地图都没有对学校有个详尽的描述

Android车载导航的一些困境

车载导航从最初的用解码芯片,过渡到用WinCE系统,已经形成了一个较大的产业.车载导航使用上的一些大原则,基本上被固定了下来.现在WinCE走到了尽头,Android车载导航开始发力,但因为Android系统的使用习惯,与传统车载的使用习惯有着较大的不同,在设计的时候,往往会遇到一些尴尬,既要保持原有的使用习惯,又要保留Android的优点.都要兼顾的话往往是技术上要费很大功夫而且带来使用上的困惑,但是市场的惯性又很难允许全面的革新.所以Android车载,我认为最大的困难并不是技术上的,而是产

APP分发渠道的竞争分析

一: 2014年结束,安卓和ios进入中国市场已经超过了五年,这五年多的时间,给人们的生活带来了巨大的改变,移动终端从塞班或者之前的功能机时代打电话发短信,年轻人聊聊天.到如今,出行打车订票订酒店,各种导航推荐,形形色色的团购等生活服务上面的提升,格式大型的炫酷的手游的也缓解了人们在等待公交地铁时的烦恼.可以说,现在的手机真的成为了人们生活中格外重要的一部分.这一切不仅仅得益于安卓和ios的飞速发展,其中格外丰富的app应用更是功不可没. 所谓app分发渠道大概可以看做app下载平台,不管作为一

如果你是手Q的产品经理,你将如何和微信竞争?

[文章摘要]当我需要发消息给某个人或某个群时,常用的联系人我会寻找聊天记录,非常用联系人则直接搜索人名或者查看通讯录,偏向于使用语音通话,免去打字的麻烦.比较在意操作的便捷程度,因为移动环境里走走停停,产品流程随时中断,操作步骤越少越好.微信完成这个流程需要1到3次点击,拖动的操作时长在联系人数有限的时候非常便捷. 1. 核心场景: 首先我们来想象一下微信(6.1.1,IOS8.2)最常见的使用场景 用户角色:我,大四学生,实习当中.互联网产品从业人员.联系人300多,活跃群组数大概有10个.每

地图导航攻坚战:公交导航

用了这么久的手机地图,终于有针对普通用户的公交导航服务了.不知道各大图商是之前技术不达标,还是没想清楚手机地图的本质.用户下载手机地图为的是什么?为好玩?肯定不是,为O2O消费?更不是,用户的需求是用地图APP帮助认路,这才是地图APP的存在价值. 地图APP价值需要获得提升 不能提供公交导航服务的地图APP都是耍流氓,用户什么时候用地图APP最为频繁?肯定是在制定出行路线或者临时去一个陌生地的时候,这时最需要地图APP提供通过公共交通到达目的地的解决方案,主要以公交.地铁.步行为主,出租车为辅

360与百度的竞争分析

NO1: 360与百度近年来的3B大战引得各位看官无限唏嘘,从360推出综合搜索开始了此次大战,而360在搜索行业的加入也着实撼动了百度自谷歌推出中国市场后的搜索霸主地位,现在就让我们从产品和策略两个方面来细看这场互联网行业巨头间的3B大战. 产品方面 自然产品的推出时这场大战最为根本的战场也是最直接的战场,360在推出综合搜索之前展现给大家的都是安全卫士的一面,不过我着实喜欢360勇敢挑战改进创新的精神,现在让我们仔细看看在每个产品上两家又有如何的碰撞与竞争. 搜索引擎:自奇虎360在2012

mui跳转页面关闭侧导航

主页面带有menu按钮,点击侧滑页面出来,点击侧滑页面的<li>标签,跳转到新页面,点击新页面,menu关闭. 主页面代码: <!DOCTYPE html><html> <head> <meta charset="utf-8"> <title>Hello MUI</title> <meta name="viewport" content="width=device-w

火了网址 - 计算机和其他领域的专业网站导航

快手导航 www.timegis.com www.huo6.cn - 专业人士,专业网址 系统建模与仿真 建模仿真 Modelica OpenModelica Matlab 系统仿真学会 系统仿真学报 航空科工 中国仿真互动 地理信息系统 地理信息 上帝之眼 中国地理信息网 地理空间项目网 GIS论坛 地理信息产业 GIS学会 中国测绘网   GIS空间站 GIS资讯小组 GIS动力 测绘英才网 几维网 华夏土地网 GIS维普咨询网   超维创想 电力GIS GIS帝国 ESRI中国 开源GIS