zoukankan      html  css  js  c++  java
  • 计蒜客: 电能传输 (Bellman-Ford)

    https://nanti.jisuanke.com/t/10772

    在嘟嘟生活的王国有 n 座城市,某些城市之间有传输电能的线路。在某条线路传输电能是会有损耗的,某一个城市在某一时间只可以向另外一个城市传输电能。已知在城市 s 存在 m 千瓦时电能,求将这些电能都传输到城市 t ,至少需要损耗多少电能。

    输入格式

    输入包含多组测试数据,对于每组测试数据:

    第一行包含一个整数 n ( 0 < n ≤ 50000 ) 。

    接下来输入包含 n 部分,对于第 i ( 1 ≤ i ≤ n )部分:第一行包含一个整数 num ( num ≤ 50 ) ,表示城市 i 可以向 num 个城市传输电能;接下来 num 行每行包含两个整数 x y ( 1 ≤ x ≤ n ; x != i ; 0 ≤ y ≤ 100 ) ,表示城市 i 可以向城市 x 传输电能,在传输时将会损失 y% 的电能。

    最后一行包含三个整数 s t m ( 1 ≤ s,t ≤ n ; 1 ≤ m ≤ 1000000 ) 。

    输出格式

    对于每组测试数据,如果城市 s 不能向城市 t 传输电能,则输出 "IMPOSSIBLE!" ;否则输出一个小数,表示损失电能的最小量,结果保留两位小数。

    样例输入

    5
    2
    2 20
    3 40
    2
    3 90
    4 50
    2
    2 40
    4 90
    1
    5 80
    0
    1 5 1000
    

    样例输出

    920.00
    #include<stdio.h>
    #define N 5000000
    double dis[N],w[N];
    int u[N],v[N];
    int main()
    {
    	int n,i,j,num,x,y,s,t,m,k,len=0;
    	double min,inf=99999999;
    	scanf("%d",&n);
    	for(i=1;i<=n;i++)
    	{
    		scanf("%d",&num);
    		while(num--)
    		{
    			scanf("%d%d",&x,&y);
    			u[len]=i;
    			v[len]=x;
    			w[len]=(100-y)/100.0;
    			len++;	
    		}
    	}
    	dis[v[0]]=0;
    	scanf("%d%d%d",&s,&t,&m);
    	for(i=1;i<=n;i++)
    		dis[i]=0;
    	dis[s]=1;
    	for(k=1;k<n;k++)
    		for(i=0;i<len;i++)
    		{
    			if(dis[v[i]]<dis[u[i]]*w[i])
    				dis[v[i]]=dis[u[i]]*w[i];
    		}
    	printf("%.2lf
    ",m*(1-dis[t]));
    	return 0;
    } 
  • 相关阅读:
    老板也是一个工种,也是一种技能
    用上了ReSharper
    《钟馗伏魔:雪妖魔灵》另类解读
    内部培训-流程图培训
    未来价值是把信息从网上拿下来,而不是放上
    一个人的电影
    2015清明节假期纪实
    十年魔戒
    天使基金资金预期使用表
    项目过程中各阶段应交付的文档
  • 原文地址:https://www.cnblogs.com/zyq1758043090/p/11852836.html
Copyright © 2011-2022 走看看