[2018.10.23 T3] 新的家园
暂无链接
新的家园
——过去已成为过去,而未来终将是过去。所有事物在出现的那一刻都注定成为历史……
题目背景
公元810281028102 年,火星的生态环境遭到严重破坏,终于也难逃人类的掠夺,变成了一颗死星。
所有人,都乘坐飞船逃往了无尽的深空,除了你。
默默地,你步行在荒芜的街道上,凝视着这片空无一人的大地——这个你由你亲自见证创造,又亲眼目送它毁灭的曾经人类的第二家园。
沙暴,四处是暗红的赤铁尘土卷起的沙暴。
红色的烟尘之中,你望见了远处废弃的行星通道,往事如潮水般涌入脑海……
题目描述
你还记得行星通道系统有nnn个站点,EEE条道路。这里的道路同时包括了行星赤道上的行星通道和地面上的道路。每一条道路都是双向通行的,且从任意一端通过第iii条道路需要的时间都为wiw_iwi。因为站点分布在赤道上,所以一定有一些边从111号站点开始依次连接2,3,4,⋯2,3,4,\cdots2,3,4,⋯号站点,并最终从nnn号站点连回111号点。
最后一班飞船即将起航,所剩的时间不多了。你决定沿着行星通道上的站点移动,最后一次认真看看这个深红的星球。
为了规划路线,你需要知道一些站点之间移动耗费的最短时间。具体的来说,有qqq个询问。每一个询问si,tis_i,t_isi,ti表示询问从sis_isi到tit_iti的最短用时。 (注:上一题的条件在本题中不一定适用)
【输入】
第一行三个整数n,E,qn,E,qn,E,q,表示站点数,道路数量和询问数。
接下来EEE行每行三个整数u,v,wu,v,wu,v,w表示u,vu,vu,v间有一条双向道路,通行时间为www。
接下来qqq行每行两个整数s,ts,ts,t,表示询问sss站点到ttt站点的最短用时。
【输出】
一共有qqq行输出。
每一行一个整数,表示每一次询问的答案。
【输入样例】
5 6 3
1 2 1
2 5 1
2 3 1
3 4 1
4 5 1
5 1 1
2 5
1 5
3 5
【输出样例】
1
1
2
【提示】
【数据范围】
令m=E−nm=E−nm=E−n
*:保证所有环以外的边以(ai,bi)(ai,bi)(ai,bi)形式依次给出,对于1≤i<n1≤i<n1≤i<n,保证ai<bia_i<b_iai<bi且bi<ai+1b_i<a_i+1bi<ai+1。
保证0≤w≤10000≤w≤10000≤w≤1000,答案在231−12^{31}−1231−1内。
题解
发现存在决策的节点只有通道的两端,大环上的节点许多是没有决策的,对于这些没有决策的节点,我们可以把这些点变成一条边,整张图只保留是通道端点的点,这样整张图大小就是O(m)O(m)O(m)的了。
询问时,把起点终点加入图中,跑一次最短路,得到答案后再把新加的边删掉,总复杂度为O(q×最短路(m,m))O(q\times 最短路(m,m))O(q×最短路(m,m))。
代码
#include<bits/stdc++.h>
#define inf 0x3f3f3f3f
using namespace std;
const int M=5e5+5;
struct sd{int to,w;}ed[M<<1];
bool operator<(sd a,sd b){return a.w>b.w;}
int loop[M],head[M],nxt[M<<1],dis[M],gra[M],le[M],ri[M],tot,n,m,q,cnt;
bool key[M],vis[M];
priority_queue<sd>dui;
void adde(int f,int t,int w){nxt[++cnt]=head[f],head[f]=cnt,ed[cnt]=(sd){t,w};}
void add(int u,int v,int w){adde(u,v,w),adde(v,u,w);}
void in()
{memset(loop,127,sizeof(loop));scanf("%d%d%d",&n,&m,&q);for(int i=1,a,b,c;i<=m;++i){scanf("%d%d%d",&a,&b,&c);if(a>b)swap(a,b);a==b-1?loop[a]=min(loop[a],c):(add(a,b,c),key[a]=key[b]=1);}
}
int dijkstra(int s,int t)
{for(int i=1;i<=tot;++i)dis[gra[i]]=inf,vis[gra[i]]=0;dui.push((sd){s,dis[s]=0});for(sd f;!dui.empty();){f=dui.top(),dui.pop();if(vis[f.to])continue;vis[f.to]=1;for(int i=head[f.to];i;i=nxt[i]){if(!vis[ed[i].to]&&dis[ed[i].to]>dis[f.to]+ed[i].w)dis[ed[i].to]=dis[f.to]+ed[i].w,dui.push((sd){ed[i].to,dis[ed[i].to]});}}return dis[t];
}
void ac()
{for(int i=1,last=0;i<=n;++i){loop[i]+=loop[i-1],le[i]=last;if(key[i]&&last)add(last,i,loop[i-1]-loop[last-1]);if(key[i])last=i,gra[++tot]=i;}for(int i=n,last=0;i;--i){ri[i]=last;if(key[i])last=i;}for(int i=1,s,t,x1,x2,x3,x4,x5,x6,pre=cnt;i<=q;++i){scanf("%d%d",&s,&t);if(s>t)swap(s,t);if(s==t){puts("0");continue;}x1=head[le[s]],x2=head[s],x3=head[le[t]],x4=head[t],x5=head[ri[s]],x6=head[ri[t]];add(le[s],s,loop[s-1]-loop[le[s]-1]),add(s,ri[s],loop[ri[s]-1]-loop[s-1]);add(le[t],t,loop[t-1]-loop[le[t]-1]),add(t,ri[t],loop[ri[t]-1]-loop[t-1]);add(s,t,loop[t-1]-loop[s-1]);dis[s]=dis[t]=inf,vis[s]=vis[t]=0;printf("%d\n",dijkstra(s,t));cnt=pre,head[le[s]]=x1,head[s]=x2,head[le[t]]=x3,head[t]=x4,head[ri[s]]=x5,head[ri[t]]=x6;}
}
int main(){in();ac();}
[2018.10.23 T3] 新的家园相关推荐
- 2018.10.23 第2周的第1次小组讨论
2018.10.23 第2周的第1次小组讨论 签到表 问题陈述 附录一 国际标准的围棋规则 附录2 界面显示 签到表 学号 姓名 状态 1120151719 马小东 到 1120151725 王鹏宇 ...
- 数据结构----顺序表的增和遍历(2018/10/23)
数据结构包含顺序表和链表 顺序表方便改和查 链表便于增删 顺序表的增和遍历: 代码一: 1 using System;2 namespace deaiWith3 {4 class MySeqList& ...
- 头条学院-新媒体训练营第10期 | 10.23笔记(新媒体:一代人的机遇)
?课程标题:新媒体-一代人的机遇 ?课程嘉宾:张恒(新榜私域运营总监) ?课程大纲↓ 一.新媒体到底是什么: 新媒体是有新技术驱动的新的媒体和传播形式. 1.技术 2.媒介 3.平台 举例,微博,微信 ...
- 【NOIP2018模拟赛2018.10.23】木门道伏击战
题目 木门道伏击战(intercept) [题目背景] 建兴九年(231 年), 诸葛亮率蜀军四出祁山. 司马懿料到蜀军粮草不济,坚守 不出,又命人在成都散布诸葛亮欲谋反的谣言.刘禅听信谣言,下旨命诸 ...
- 2018 10 23
昨天计划11点睡,结果11点躺下,11点30睡的,看看早睡对于今天工作的效果 转载于:https://www.cnblogs.com/swobble/p/9834542.html
- Java黑皮书课后题第10章:**10.23(实现String类)在Java库中提供了String类,给出你自己对下面方法的实现(将新类命名为MyString2)
**10.23(实现String类)在Java库中提供了String类,给出你自己对下面方法的实现(将新类命名为MyString2) 题目 简短的吐槽 代码:这里将类名改用Test23_MyStrin ...
- 新萝卜家园GHOST XP Sp3装机版V2012.10下载
新萝卜家园ghost xp Sp3装机版V2012.10 新萝卜家园GHOST xp Sp3装机版V2012.10 新萝卜家园GHOST XP Sp3装机版V2012.10 新萝卜家园GHOST XP ...
- 2018年10月训练记录(10.1~10.23)
前言 这篇博客记录的是我在201820182018年101010月的刷题列表. 由于时间比较匆忙,可能会有一些空链接,但我会尽快将它们补齐的. (目前链接已补至Oct7thOct\ 7thOct 7t ...
- Linux一句话精彩问答--2007/10/23更新
from:http://linux.chinaunix.net/bbs/viewthread.php?tid=16141&extra= Linux一句话精彩问答--2007/10/23更新 [ ...
- 2020幂次生长,GMIC开启下一个10年科技新浪潮
1月8日,全球移动互联网大会(Global Mobile Internet Conference,简称GMIC)在北京召开了2020年启动发布会.长城会CEO周昌华.GMIC项目总监邓书平.GMIC内 ...
最新文章
- iMeta | 浙大倪艳组MetOrigin实现代谢物溯源和肠道微生物组与代谢组整合分析
- 惊闻谢文离职雅虎中国
- MKL25Z128 Cortex-M0微处理器架构定义的存储器映射
- SqlService 数据操作
- C语言中的位域 bit field [转]
- python单链表操作_单链表的创建、增删改查等操作(Python实现)
- scenejs的一点Cameras小笔记
- 选择Asp for javascript,非.net。
- css -- 两种方法实现流式布局
- linux下安装VMware Tools
- 【ccpc网络赛】YJJ's Salesman【1010】【树状数组+离散化+dp】
- DF1协议的CSP寻址
- 数字信号处理:重要知识点整理
- 高项、高级项目管理师论文-成本管理
- 关于o1,o2,o3
- 蓝字冲销是什么意思_​红字发票和蓝色发票是什么意思
- translate maketrans 方法详解
- Windows系统图片不显示缩略图如何解决
- 亚马逊Amazon SP-API注册申请和授权对接开发和亚马逊SP-API开发人员注册资料的注意事项,PII申请的事项
- python求二维数组的鞍点_C语言程序,找出一个二维数组的鞍点。
热门文章
- 能力提升综合题单 Part 8.3.3 最近公共祖先
- 能力提升综合题单Part 8.1 图的存储与遍历
- Centos7 安装MySQL5
- QueryWrapper、LambdaQueryWrapper以及LambdaQueryChainWrapper用法
- mysql.5.7 declare_MySQL-5.7 游标及DECLARE
- pytest-fixture
- 【XSY2470】lcm 数学
- Js中Array数组学习总结
- Liferay 6.2 改造系列之十三:修改用户编辑页面表单内容
- NSArray去除重复元素