Description

  • 有向图有些边的的边权都为未知的x,求当x为正整数时S到T的最短路有多少种取值,并求不同最短路长度之和。
  • n<=500,m<=10000,Q<=10

Solution

  • 设dis[x][i]表示到S出发到x点,经过i调未知边时已知边的最小代价。
  • SPFA求出即可。
  • 发现最短路为未知边权为x时,y=i*x+dis[T][i],即一次函数。
  • 维护上凸壳取最小值。计算答案注意交点为整数时的情况。
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define maxn 505
#define maxm 10005
#define maxd 500005
#define inf 2e9
#define ll long long
#define db double
#define ESP 0.0000001
using namespace std;int n,m,Q,x,y,z,i,j,k;
int em,e[maxm],nx[maxm],ls[maxn],ec[maxm];
int S,T,t,w,d[maxd][2],D[maxn];
int vis[maxn][maxn],last;
ll ans,l,r,dis[maxn][maxn];
db jd[maxn];void read(int &x){x=0; char ch=getchar();while (ch!='x'&&(ch<'0'||ch>'9')) ch=getchar();if (ch=='x') x=0; elsefor(;ch>='0'&&ch<='9';ch=getchar()) x=x*10+ch-'0';
}void insert(int x,int y,int z){em++; e[em]=y; nx[em]=ls[x]; ls[x]=em; ec[em]=z;
}void SPFA(int S,int T){memset(vis,0,sizeof(vis));memset(dis,127,sizeof(dis));t=0,w=1,d[1][0]=S,d[1][1]=0,vis[S][0]=1,dis[S][0]=0;while (t<w){t=(t+1)%maxd; int x=d[t][0],k1=d[t][1];vis[x][k1]=0;for(int i=ls[x];i;i=nx[i]) {int y=e[i],k2=d[t][1]+(ec[i]==0);if (k2>=n) continue;if (dis[x][k1]+ec[i]<dis[y][k2]){dis[y][k2]=dis[x][k1]+ec[i];if (!vis[y][k2]){vis[y][k2]=1,w=(w+1)%maxd;d[w][0]=y,d[w][1]=k2;}}}}
}db get(int i,int j){return 1.0*(dis[T][i]-dis[T][j])/(j-i);
}int main(){scanf("%d%d",&n,&m);for(i=1;i<=m;i++){read(x),read(y),read(z);insert(x,y,z);}scanf("%d",&Q);while (Q--){read(S),read(T);SPFA(S,T);if (dis[T][0]>inf) {int tp=0;for(i=1;i<n;i++) if (dis[T][i]<inf) {tp=1;break;}if (!tp) printf("0 0\n");else printf("inf\n");continue;}w=0;for(i=n-1;i>=0;i--) {while (w>1&&get(i,D[w-1])<get(D[w],D[w-1])) w--;while (w&&get(i,D[w])<0) w--;D[++w]=i;}if (w==1){printf("1 %lld\n",dis[T][0]);continue;}for(i=1;i<w;i++) jd[i]=get(D[i],D[i+1]);printf("%d ",(int)ceil(jd[w-1]));last=0,ans=0;for(i=1;i<w;i++){l=last+1,r=floor(jd[i]),last=r;ans+=(l*D[i]+dis[T][D[i]])*(r-l+1);ans+=(D[i]+(r-l)*D[i])*(r-l)/2;}if (last<ceil(jd[w-1])) ans+=dis[T][0];printf("%lld\n",ans);}
}

JZOJ3238. 超空间旅行相关推荐

  1. 欢乐纪中某A组赛【2019.7.11】

    前言 话说今天好像放做题导致BBB组贼难AAA组还好. 成绩 JJJ表示初中,HHH表示高中后面加的是几年级 RankRankRank PersonPersonPerson ScoreScoreSco ...

  2. 【2019暑假集训】07.11比赛总结

    今天被一大堆大佬踩了%%%Orz 比赛思路 T1( 矮人排队):一上来理解好题意之后(配合样例食用),就发现是一道裸的线段树. T2( 间谍派遣):转化了一会儿题意之后发现是一个最小生成树,但是我没有 ...

  3. 2022-2028年中国在线旅行预订市场投资分析及前景预测报告

    [报告类型]产业研究 [出版时间]即时更新(交付时间约3个工作日) [发布机构]智研瞻产业研究院 [报告格式]PDF版 本报告介绍了在线旅行行业相关概述.中国在线旅行行业运行环境.分析了中国在线旅行行 ...

  4. LeetCode简单题之旅行终点站

    题目 给你一份旅游线路图,该线路图中的旅行线路用数组 paths 表示,其中 paths[i] = [cityAi, cityBi] 表示该线路将会从 cityAi 直接前往 cityBi .请你找出 ...

  5. usaco Cow Tours 牛的旅行

    Cow Tours 牛的旅行 农民 John 的农场里有很多牧区.有的路径连接一些特定的牧区.一片所有连通的牧区称为一个牧场. 但是就目前而言,你能看到至少有两个牧区不连通.这样,农民 John 就有 ...

  6. gatsby_如何使用Gatsby和Leaflet创建夏季公路旅行地图绘制应用程序

    gatsby Get ready for the summer by building your own road trip mapping app with this step-by-step gu ...

  7. 汉印标签打印机app_旅行一族福音 汉印CP4000L便携照片打印机体验

    最近一段时间,有个问题经常在我脑海中出现:"我们为什么需要打印照片?" 不过没想到,让我瞬间解除这个疑惑的,却是近期刚刚上市的一款便携照片打印机-汉印CP4000L.自从知晓这款产 ...

  8. 2D景观转3D风景大片,无惧复杂光线与遮挡,人类离「躺着旅行」的梦想又近了一步...

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 整理:公众号@机器之心 本文仅做学术分享,如有侵权,请联系删除. 万物皆可转 3D. 上班的时候想旅行 ...

  9. 旅行售货员 java_JAVA旅行商售货TSP

    题目描述 有若干个城市,任何两个城市之间的距离都是确定的,现要求一旅行商从某城市出发必须经过每一个城市且只在一个城市逗留一次,最后回到出发的城市,问如何事先确定一条最短的线路以保证路径最短? 输入 输 ...

最新文章

  1. 2019年1月计算机书籍JavaScript新书
  2. SAP修改消息内容和报错类型(SE91和OBA5)
  3. java 输出ssl握手信息_使用Java的SSL握手错误
  4. DevExpress 13.2.6源码、安装包、汉化包下载和教程
  5. [九度][何海涛] 最小的K个数
  6. 文学类容易发表的期刊或者学报有哪些?
  7. 如果编程语言都是漂亮的小姐姐,你会喜欢哪一个?
  8. html定义子菜单初始为隐藏,需要静心学习的PbootCMS模板制作教程(五)
  9. 盘点“PayPal黑帮”成员的传奇创业故事
  10. 英语学习是必可被解决的问题
  11. 【龙芯1B】:有源蜂鸣器例程
  12. Linux非交互式修改用户密码
  13. 【Python】如何利用python对c程序源码进行协助解读(学会事半功倍)
  14. matlab使用自带的拟合工具cftool对数据进行拟合并生成拟合函数代码
  15. java大厂技术面试第二课 多线程和锁
  16. C++ - 实现strcpy函数
  17. 黑白照片怎么变成彩色?分享一个转换小妙招
  18. ⌈ 2022杀青 ⌋ 一个普通人的年终总结,这一年我获得了更多的新鲜体验 | 普通而平凡的一年 | 向前走,走到光里 | 2023你好
  19. 笨办法学python在线阅读_笨办法学python全集.pdf
  20. Java Stream流式编程

热门文章

  1. 温控中使用PID控制算法
  2. FL Studio教程之如何加载采样
  3. 计算机word.实训报告体会,计算机实训报告【五篇】.docx
  4. 微信发送过来的位置怎样用高德地图收藏这个点加入收藏夹
  5. 归并排序java_Java经典排序算法之归并排序详解
  6. 【C#】CsvHelper 读写CSV文件
  7. bert中文情感分析二分类任务详解
  8. git 不显示远端分支问题
  9. 两个例子讲清Thread的setDaemon的作用
  10. 禁止ubuntu更新内核