幻想乡三连C:狂飙突进的幻想乡
题解:
不难发现,对于每一条从$S$到$T$的路径,设其$x、y$的和为$S_x、S_y$,其对答案的贡献是$a\cdot S_x+(1-a)\cdot S_y$,这是一个关于$a$的一次函数。而所有的路径就对应着许多$a\in [0,1]$直线,而不同$a$所对应的最短路长度恰好构成了这些直线的上凸壳,而求最短路的期望就是求上凸壳的积分(与坐标系横轴所夹面积),考虑到$n、m$很小,所以直接用一次函数不断拟合,每次求点值暴力跑一边最短路即可。
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<queue>
#define LL long long
#define M 802
#define N 202
#define INF 1010000000
#define eps (1e-5)
using namespace std;
int read(){int nm=0,fh=1; char cw=getchar();for(;!isdigit(cw);cw=getchar()) if(cw=='-') fh=-fh;for(;isdigit(cw);cw=getchar()) nm=nm*10+(cw-'0');return nm*fh;
}
struct STA{int nd; double dst;STA();STA(int _nd,int _dst){nd=_nd,dst=_dst;}bool operator <(const STA&ot)const{return dst>ot.dst;}
};
priority_queue<STA> Q;
int n,m,X[M],Y[M],fs[N],nt[M],to[M],tmp,S,T;
double dis[N];
bool vis[N];
void link(int x,int y,int t1,int t2){nt[tmp]=fs[x],fs[x]=tmp,to[tmp]=y,X[tmp]=t1,Y[tmp++]=t2;}
double DJ(double V){for(int i=1;i<=n;i++) dis[i]=INF*1.0,vis[i]=false;while(!Q.empty()) Q.pop(); dis[S]=0.0,Q.push(STA(S,0.0));while(!Q.empty()){int x=Q.top().nd; Q.pop();if(vis[x]) continue; vis[x]=true;for(int i=fs[x];i!=-1;i=nt[i]){double dt=dis[x]+(X[i]*V)+(Y[i]*(1.0-V));if(dt>=dis[to[i]]) continue;dis[to[i]]=dt,Q.push(STA(to[i],dt));}}return dis[T];
}
double calc(double L,double R){double mid=(L+R)/2.0,ans,ls,rs;ans=DJ(mid),ls=DJ(L),rs=DJ(R);if(fabs(ans-(ls+rs)/2.0)*(R-L)<eps) return ans*(R-L);return calc(L,mid)+calc(mid,R);
}
int main(){n=read(),m=read(),S=read(),T=read(),memset(fs,-1,sizeof(fs));for(int i=1;i<=m;i++){int u=read(),v=read(),t1=read(),t2=read();link(u,v,t1,t2),link(v,u,t1,t2);}printf("%.10f\n",calc(0.0,1.0)); return 0;
}
转载于:https://www.cnblogs.com/OYJason/p/9651769.html
幻想乡三连C:狂飙突进的幻想乡相关推荐
- 狂飙突进的幻想乡 - 最短路 - 辛普森积分
题目大意:给一张无向图,每条边有个(x,y),每条边的边权是ax+(1−a)yax+(1-a)yax+(1−a)y.若a在[0,1]均匀随机,问期望最短路是多少.n<=200,m<=400 ...
- 2016北京集训测试赛(九)Problem C: 狂飙突进的幻想乡
Solution 我们发现, 对于一条路径来说, 花费总时间为\(ap + q\), 其中\(p\)和\(q\)为定值. 对于每个点, 我们有多条路径可以到达, 因此对于每个区间中的\(a\)我们可以 ...
- 幻想乡三连A:五颜六色的幻想乡
非常直接地构造 由于答案与生成树计数有关,所以一定要使用矩阵树定理,但这样就不能限制每种颜色的便使用的数量 我们构造$N^2$个关于$Ans_{x,y}$的方程,枚举将红色的边拆成$x$条,将蓝色的边 ...
- 龙族幻想最新东京机器人位置_龙族幻想:东京·白月境活动介绍
在<龙族幻想>手游中,有的玩家喜欢参加PVE副本,有的玩家则喜欢参与PVP活动,在PVP活动中又分为单人PVP活动以及团队PVP活动.除此之外,还有一个活动也属于PVP,那就是今天要介绍 ...
- 龙族幻想最新东京机器人位置_龙族幻想:最强“人形兵器”格斗家降临卡塞尔学院...
一转眼<龙族幻想>已经上线了许久,虚拟4引擎搭配GPU特效,结合PBR渲染技术无疑让它成为了RPG手游中的优等生,这款3D手游可谓当是今腾讯旗下当之无愧的旗舰RPG手游.相信每一位体验过游 ...
- 龙族幻想最新东京机器人位置_龙族幻想藤原智坐标位置一览 藤原智任务攻略...
龙族幻想v1.3.148安卓版 类型:角色扮演大小:1.39G语言:中文 评分:5.0 标签: 立即下载 龙族幻想藤原智在哪?这是苍穹之下异闻,需要找到npc藤原智,许多玩家都不清楚在什么位置,如何完 ...
- 龙族幻想服务器维护中怎么办,龙族幻想社团维护费用不足怎么办_龙族幻想社团维护费用解决攻略_玩游戏网...
<龙族幻想>异闻攻略大全 在龙族幻想手游中异闻究竟该怎么过呢?在龙族幻想手游中异闻玩法可以说是非常受小伙伴们欢迎的了,那么想了解这些异闻录的小伙伴们下面就来看一下吧!龙族幻想下载地址:点击 ...
- 龙族幻想最新东京机器人位置_龙族幻想凌晨四点的东京机器人位置在哪?
龙族幻想凌晨四点的东京异闻怎么触发?凌晨四点的东京需要找到机器人,集齐是个机器人就能完成任务,这次小编分享的就是凌晨四点的东京异闻的玩法攻略,下面是凌晨四点的东京机器人的坐标位置,大家可以根据攻略前去 ...
- 龙族幻想东京机器人一次_龙族幻想凌晨四点的东京机器人坐标-机器人刷新点_6137游戏网...
龙族幻想凌晨四点的东京机器人在哪,机器人怎么找,机器人刷新点,机器人坐标还不清楚的玩家赶快和小编一起看看吧! 异闻攻略 1.触发地点:校长室左边柱子.注意,触发条件没有限制,全天都可以 2.开箱子获得 ...
最新文章
- HH SaaS电商系统的供应商系统设计
- cont char *p 和 char* const p 区别及记忆方法
- C++ static静态成员变量
- vue 项目中使用粘性布局不起作用_做vue项目中遇到的坑总结与学习
- autojs命令代码大全_各个主流品牌手机的命令代码大全,安卓工程模式的指令大全!...
- 【转】SpringMVC Controller 介绍
- plsql 存储过程 批量提交_新一代的键值存储 KVell SOSP 2019
- 动态文本_(302期)【动态】|| 立足相同文本,描绘不同风景 ——工作室开展“同课异构”活动...
- python获取百度迁徙大数据
- Dhtmlx Gantt中lightbox如何自定义name值
- typo:in word ‘ ‘ 问题解决方法
- 资源依赖项注入失败: org.springframework.beans.factory.BeanCreationException: Error creating bean with name
- Gooxi国产化服务器专题介绍之海光服务器
- 10分钟白嫖我的常用的在线工具网站清单
- 阴阳师自动御魂觉醒超鬼王脚本
- 计算机考试行高怎么设置,Excel隔行调整行高的四种有效方法
- Microsoft Speech Platform案例
- JZOJ5426. 【NOIP2017提高A组集训10.25】摘Galo
- 特大整数相加(C实现)
- 【Gulimall】Spring Cloud:spring-cloud-gateway、spring-cloud-openfeign,Alibaba的注册+配置中心Nacos