ZOJ1655
来源:互联网 发布:阿里云ftp默认端口号 编辑:程序博客网 时间:2024/06/07 07:56
题意:1号点为首都,其他点上都有物资,每经过一条边都会有一个损耗比,问最多多少物资能运到首都
题解: 最短路,求消耗比例最少的从首都到其他城市的路,然后sigma w[k]*rate[1][k] k>1 k<=n即可
#include<bits/stdc++.h>#define w second#define y firstusing namespace std;const int MAXN=200;int n,m;typedef pair<int ,double>pii;double d[MAXN],f[MAXN];vector<pii>a[MAXN];void spfa(){ bool vis[MAXN]={0}; queue<int>q; memset(d,0,sizeof(d)); d[n]=1.0; vis[n]=true; q.push(n); while (!q.empty()) { int h=q.front(); q.pop(); for (int i=0;i<a[h].size();i++) { if (d[h]*a[h][i].w>d[a[h][i].y]) { d[a[h][i].y]=d[h]*a[h][i].w; if (!vis[a[h][i].y]) { q.push(a[h][i].y); vis[a[h][i].y]=true; } } } vis[h]=false; }}void Gao(){ for (int i=1;i<=n;i++) a[i].clear(); for (int i=1;i<n;i++) scanf("%lf",f+i); for (int i=0;i<m;i++) { int xx,yy; double zz; scanf("%d%d%lf",&xx,&yy,&zz); double rate=1.0-zz; a[xx].push_back(make_pair(yy,rate)); a[yy].push_back(make_pair(xx,rate)); } spfa(); double ans=0.0; for (int i=1;i<n;i++) ans+=f[i]*d[i]; printf("%.2lf\n",ans);}int main(){ //freopen("a.in","r",stdin); while (cin>>n>>m) Gao(); return 0;}
0 0
- zoj1655
- ZOJ1655
- zoj1655 spfa 最长路径
- zoj1655(最短路)
- ZOJ1655 Transport Goods,Dijkstra算法
- ZOJ1655-Transport Goods-greedy,dijkstra
- 区分二维数组与指针数组的区别
- POJ 1750 Dictionary(模拟)
- html float居中
- Android运行时异常“Binary XML file line # : Error inflating class”
- Oracle客户端、Oracle版本不同时登陆表现
- ZOJ1655
- TSPLIB简介与简易解析器实现
- 数据的存储与输入输出(数据类型,常量,变量)
- 人民币转换
- Ipopt 的一个小实例的编译
- 计算机的中断
- Android数据库高手秘籍(二)——创建表和LitePal的基本用法
- 最后一个字长
- 程序员求职之道(《程序员面试笔试宝典》)