zoukankan      html  css  js  c++  java
  • 洛谷P1576 最小花费

    题目描述

    在n个人中,某些人的银行账号之间可以互相转账。这些人之间转账的手续费各不相同。给定这些人之间转账时需要从转账金额里扣除百分之几的手续费,请问A最少需要多少钱使得转账后B收到100元。

    输入输出格式

    输入格式:
    第一行输入两个正整数n,m,分别表示总人数和可以互相转账的人的对数。

    以下m行每行输入三个正整数x,y,z,表示标号为x的人和标号为y的人之间互相转账需要扣除z%的手续费 (z<100)。

    最后一行输入两个正整数A,B。数据保证A与B之间可以直接或间接地转账。

    输出格式:
    输出A使得B到账100元最少需要的总费用。精确到小数点后8位。

    输入输出样例

    输入样例#1:
    3 3
    1 2 1
    2 3 2
    1 3 3
    1 3
    输出样例#1:
    103.07153164

    说明

    1<=n<=2000

    题解

    这题是很裸的最短路好吗,不要和我多说什么,没什么可说的。
    不过,貌似不能用SPFA吧(反正我不知道怎么用SPFA做)
    (我貌似加了个队列优化,只是闲的,貌似不加也能过)


    下来贴代码:

    #include<bits/stdc++.h>
    #define inf 1000000000
    using namespace std;
    struct edge{
        int to;
        double w;
    };
    typedef pair<double,int> pii;
    int n,m;
    int a,b;
    vector<edge> e[2001];
    int in[2001];
    double d[2001];
    priority_queue<pii,vector<pii>,greater<pii> > q;
    void dijkstra(){
        d[b]=100;
        q.push(make_pair(d[b],b));
        while(!q.empty()){
            pii t=q.top();
            q.pop();
            int k=t.second;
            if(in[k]){
                continue;
            }
            in[k]=1;
            for(int i=0;i<e[k].size();i++){
                edge h=e[k][i];
                if(d[k]/h.w<d[h.to]){
                    d[h.to]=d[k]/h.w;
                    q.push(make_pair(d[h.to],h.to));
                }
            }
        }
    }
    int main(){
        cin>>n>>m;
        for(int i=1;i<=n;i++){
            d[i]=inf;
        }
        for(int i=1;i<=m;i++){
            int x,y,l;
            scanf("%d %d %d",&x,&y,&l);
            edge t;
            t.to=y;
            t.w=1-l*0.01;
            e[x].push_back(t);
            t.to=x;
            e[y].push_back(t);
        }
        cin>>a>>b;
        dijkstra();
        printf("%.8lf",d[a]);
        return 0;
    }
    
  • 相关阅读:
    【more effective c++读书笔记】【第2章】操作符(1)
    【more effective c++读书笔记】【第1章】基础议题(2)
    【more effective c++读书笔记】【第1章】基础议题(1)
    【effective c++读书笔记】【第9章】杂项讨论
    Spring(十二)Spring整合Mybatis
    Spring(十一)Spring事物
    Spring(九)AspectJ
    Spring(八)两种自动代理
    Spring 考试错题分析
    Sping(七)Sping四种增强和顾问
  • 原文地址:https://www.cnblogs.com/stone41123/p/7581307.html
Copyright © 2011-2022 走看看