码迷,mamicode.com
首页 > 其他好文 > 详细

Lightoj 1321 Sending Packets(Bellman-Ford)

时间:2016-11-27 23:25:26      阅读:206      评论:0      收藏:0      [点我收藏+]

标签:ems   style   方便   packet   scan   pre   cond   blog   成功   

题意

给定一个无向图,边的权值为小于1的小数,表示通过这条边的数据成功传输到另一边的可能性,0.8表示有百分之八十的可能性传输过去。问你从起点到终点,最大的传输成功率多大。

分析

根据题意,相当于求一个最长路,dijkstra有点难写,直接用bellman-ford,因为边权值都是小于1的,所以更新操作用的乘法永远是越来越小的,我们刚好要最大的。所以比较方便就能处理出来,然后得出最大的传输成功率以后结合题意中的其他要求进行简单的运算就能得出答案了。

代码

#define rep(x,y,z) for(int x=y;x<z;x++)
#define drep(x,y,z) for(int x=y;x>=z;x--)
#define pb(x) push_back(x)
#define mp(x,y) make_pair(x,y)
#define clr(x,y) memset(x,y,sizeof(x))
#define fi first
#define se second

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;

const int N = 110;

vector<pair<pair<int,int>,double> > edge;
double val[N];
double dp[N][N];

void init(){
    edge.clear();
    clr(val,0);
    clr(dp,0);
}

void read(int m){
    rep(i,0,m){
        int u , v , w;
        scanf("%d %d %d",&u,&v,&w);
        edge.pb(mp(mp(u,v),double(w)/100.0));
        edge.pb(mp(mp(v,u),double(w)/100.0));
    }
}

double slove(int n){
    val[0] = 1;
    int size = edge.size();
    while(1){
        bool ok = 0;
        rep(i,0,size){
            int u = edge[i].fi.fi;
            int v = edge[i].fi.se;
            double w = edge[i].se;

            if(val[u] * w > val[v]){
                ok = 1;
                val[v] = val[u] * w;

            }
        }
        if(!ok) break;
    }
    return val[n - 1];
}

int main(){
    int t;
    scanf("%d",&t);
    rep(tt,1,t+1){
        int n , m , s , k;
        scanf("%d %d %d %d",&n,&m,&s,&k);
        init();
        read(m);
        double ans = slove(n);
        //
        ans = (k / ans) * 2 * s;
        //
        printf("Case %d: %lf\n",tt,ans);
    }


    return 0;
}

 

Lightoj 1321 Sending Packets(Bellman-Ford)

标签:ems   style   方便   packet   scan   pre   cond   blog   成功   

原文地址:http://www.cnblogs.com/ticsmtc/p/6107225.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!