JZOJ 4826. 【NOIP2016提高A组集训第2场10.30】小澳的葫芦
2016-11-09 19:28
531 查看
Problem
Description小澳最喜欢的歌曲就是《葫芦娃》。
一日表演唱歌,他尽了洪荒之力,唱响心中圣歌。
随之,小澳进入了葫芦世界。
葫芦世界有n个葫芦,标号为1~ n。n个葫芦由m条藤连接,每条藤连接了两个葫芦,这些藤构成了一张有向无环图。小澳爬过每条藤都会消耗一定的能量。
小澳站在1号葫芦上(你可以认为葫芦非常大,可以承受小澳的体重),他想沿着藤爬到n号葫芦上,其中每个葫芦只经过一次。
小澳找到一条路径,使得消耗的能量与经过的葫芦数的比值最小。
Input
输入文件名为calabash.in。
输入文件第一行两个正整数n,m,分别表示葫芦的个数和藤数。
接下来m行,每行三个正整数u,v,w,描述一条藤,表示这条藤由u连向v,小澳爬过这条藤需要消耗w点能量。
Output
输出文件名为calabash.out。
一行一个实数,表示答案(绝对误差不超过 10^-3)。
Sample Input
4 6
1 2 1
2 4 6
1 3 2
3 4 4
2 3 3
1 4 8
Sample Output
2.000
Hint
有4种爬法:
1->4,消耗能量8,经过2个葫芦,比值为8/2=4。
1->2->4,消耗能量1+6=7,经过3个葫芦,比值为7/3≈2.33。
1->3->4,消耗能量2+4=6,经过3个葫芦,比值为6/3=2。
1->2->3->4,消耗能量1+3+4=8,经过4个葫芦,比值为8/4=2。
所以选第三种或第四种方案,答案为2。
Solution
实质上就是一个普通的SPFA,然后dis[x][y]表示走到x号点时已走了y个点(包括x号点)的最短距离,然后答案就是min(dis[n][i]i)Code
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #define N 210 #define M 2010 #define fo(i,a,b) for(i=a;i<=b;i++) using namespace std; int v[M*2],go[M*2],next[M*2],head[M*2],dis[N][N],d[N*N][2]; int tot,i,j,m,n,x,y,z,t,w,now,num; double ans; bool bz[N][N]; void lb(int x,int y,int z) { go[++tot]=y; next[tot]=head[x]; head[x]=tot; v[tot]=z; } int main() { freopen("calabash.in","r",stdin); freopen("calabash.out","w",stdout); scanf("%d%d",&n,&m); fo(i,1,m) { scanf("%d%d%d",&x,&y,&z); lb(x,y,z); } memset(dis,127,sizeof(dis)); t=0;w=1; dis[1][1]=0; d[1][0]=d[1][1]=1; while (t<w) { t++; now=d[t][0];num=d[t][1]; for(i=head[now];i;i=next[i]) { int to=go[i]; if (dis[now][num]+v[i]<dis[to][num+1]) { dis[to][num+1]=dis[now][num]+v[i]; if (!bz[to][num+1]) { w++; d[w][0]=to; d[w][1]=num+1; bz[to][num+1]=1; } } } bz[now][num]=0; } ans=2139062143; fo(i,2,n) if (dis [i]!=2139062143 && (double)dis [i]/i<ans) ans=(double)dis [i]/i; printf("%.3lf",ans); }
相关文章推荐
- JZOJ4854【NOIP2016提高A组集训第6场11.3】小澳的坐标系
- 【JZOJ4854】【NOIP2016提高A组集训第6场11.3】小澳的坐标系
- 【NOIP2016提高A组集训第2场10.30】钻石游戏
- JZOJ 4866. 【NOIP2016提高A组集训第8场11.5】禅与园林艺术
- 【JZOJ4882】【NOIP2016提高A组集训第12场11.10】多段线性函数
- 【JZOJ4886】【NOIP2016提高A组集训第13场11.11】字符串
- JZOJ4890. 【NOIP2016提高A组集训第14场11.12】随机游走
- JZOJ 4823. 【NOIP2016提高A组集训第1场10.29】小W学物理
- NOIP2016提高A组集训第1场【JZOJ4823】小W学物理
- 【JZOJ4831】【NOIP2016提高A组集训第3场10.31】方程式
- JZOJ 5436. 【NOIP2017提高A组集训10.30】Group
- JZOJ4870. 【NOIP2016提高A组集训第9场11.7】涂色游戏
- JZOJ 4883 【NOIP2016提高A组集训第12场11.10】灵知的太阳信仰
- 【JZOJ4901】【NOIP2016提高A组集训第18场11.17】矩阵
- 【JZOJ4845】【NOIP2016提高A组集训第5场11.2】寻找
- 【JZOJ4883】【NOIP2016提高A组集训第12场11.10】灵知的太阳信仰
- 【JZOJ4887】【NOIP2016提高A组集训第13场11.11】最大匹配
- 【JZOJ4890】【NOIP2016提高A组集训第14场11.12】随机游走
- JZOJ 4840. 【NOIP2016提高A组集训第4场11.1】小W砍大树
- 【JZOJ4896】【NOIP2016提高A组集训第16场11.15】兔子