赚钱啦

时间限制:1000 ms  |  内存限制:65535 KB
难度:5
描述

某国家里有N个城市,分别编号为0~N-1,一个精明的商人准备从0号城市旅行到N-1号城市,在旅行的过程中,从一个城市移动到另外一个城市需要有一定的花费,并且从A城市移动到B城市的花费和B城市移动到A城市的花费相同,但是,从A城市移动到B城市能赚取的钱和从B城市移动到A城市赚的钱不一定相同。

现在,已知各个城市之间移动的花费和城市之间交易可赚取的金钱,求该商人在从0号城市移动到N-1号城市的过程中最多能赚取多少钱?

输入
第一行是一个整数T(T<=10)表示测试数据的组数

每组测试数据的第一行是两个整数N,M表示,共有N个城市(1<N<=1000),M条路(1<=M<=1000)

随后的M行,每行有5个正整数,前两个数a,b(0<=a,b<N)表示两个城市的编号。后面的三个数c,u,v分别表示在a,b城市之间移动的花费,a城市移动到b城市可赚取的资金,b城市移动到a城市可赚取的资金。

(0<=c,u,v<=1000)
输出
如果商人能够在旅行过程中赚取无限多的资金,则输出$$$

否则输出他在移动过程中最多能赚取的资金数量

如果只会赔钱的话就输出一个负数,表示最少赔的钱数。
样例输入
2
2 1
0 1 10 11 11
3 3
0 1 10 16 0
1 2 10 15 5
0 2 20 32 0
样例输出
$$$
12
来源
2011年ACM队队长选拨赛

与最短路不同的是这道题在题意上有很大的变更,求的是能获取最大资金,但方法可以用Spfa,或者bellman算法,只不过在存双向图的时候要特别注意,这里介绍一下bellman算法,代码还是挺简洁的;可以用邻接矩阵储存权值,就是在利用bellman算法的时候再反向判断一下另一个顶点就可以了,具体看代码:有不足之处望多多指教,谢谢:

#include<cstdio>
#include<cmath>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int INF=-0x3f3f3f3f;//注意;
const int N=1000+10;
struct node
{
int u,v,c,a,b;
} a[N];
int d[N];
int spfa(int n,int m)
{
for(int i=0; i<n; i++)
d[i]=i==0?0:INF;
for(int i=0; i<n; i++)
for(int j=0; j<m; j++)
{
if(d[a[j].v]<d[a[j].u]+a[j].a)//判断终点(两点中被指向的那个)
{
d[a[j].v]=d[a[j].u]+a[j].a;
if(i>=n-1)//存在正环图;
return 1;
}
if(d[a[j].u]<d[a[j].v]+a[j].b)//判断起点;
{
d[a[j].u]=d[a[j].v]+a[j].b;
if(i>=n-1)
return 1;
}
}
return 0;
}
int main()
{
int t,n,m,i;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
int f=0;
for(i=0; i<m; i++)
{
scanf("%d%d%d%d%d",&a[i].u,&a[i].v,&a[i].c,&a[i].a,&a[i].b);
a[i].a-=a[i].c,a[i].b-=a[i].c;
if(a[i].a+a[i].b>0)
f=1;
}
if(f)
printf("$$$\n");
else
{
int k=spfa(n,m);
if(k)
printf("$$$\n");
else
printf("%d\n",d[n-1]);
}
}
return 0;
}

自我感觉代码比较简短,易懂,有的地方还可以改进优化;

NYOJ-183赚钱啦,bellman//spfa水过,,题还是蛮变态的赶脚~~的更多相关文章

  1. PKU 1932 XYZZY(Floyd+Bellman||Spfa+Floyd)

    题目大意:原题链接 给你一张图,初始你在房间1,初始生命值为100,进入每个房间会加上那个房间的生命(可能为负),问是否能到达房间n.(要求进入每个房间后生命值都大于0) 解题思路: 解法一:Floy ...

  2. HDU——2066一个人的旅行(优先队列SPFA水题)

    一个人的旅行 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  3. 8.2/baltic神(水)题

    summary:10 bzoj1334: Description N个政党要组成一个联合内阁,每个党都有自己的席位数. 现在希望你找出一种方案,你选中的党的席位数要大于总数的一半,并且联合内阁的席位数 ...

  4. 【Richard 的刷(水)题记录】

    大概想了想,还是有个记录比较好. 9/24 网络流一日游: 最大流:bzoj1711[Usaco2007 Open]Dining 拆点 BZOJ 3993 Sdoi2015 星际战争 二分 P.S.这 ...

  5. POJ1511 Invitation Cards SPFA算法裸题变形

    原题目:http://poj.org/problem?id=1511 给出一个有向图,求出这个图从1到所有点的最短路径和所有点到1的最短路径的和. 这题数据量有点大,数据范围也大,所以用SPFA+邻接 ...

  6. mysql练习题目试水50题,附建库sql代码

    如果你没试过水的话,那一题一题地每一题都敲一遍吧.不管它们对你看来有多么简单.  建库代码 部分题目答案在末尾,可用ctrl f  搜索题号. 作业练习——学生-选课 表结构 学生表: Student ...

  7. 我的CodeF水A题之路

    Codeforces Round #359 (Div. 2) A. Free Ice Cream 题目链接:http://www.codeforces.com/problemset/problem/6 ...

  8. codevs 1360 xth砍树 线段树不能再水的题了

    连标记都不用打.. #include<cstdio> #include<cstring> #include<algorithm> using namespace s ...

  9. 【CodeForces 602B】G - 一般水的题2-Approximating a Constant Range

    Description When Xellos was doing a practice course in university, he once had to measure the intens ...

随机推荐

  1. 享元模式及php实现

    享元模式: 享元模式(Flyweight Pattern):运用共享技术有效地支持大量细粒度对象的复用.系统只使用少量的对象,而这些对象都很相似,状态变化很小,可以实现对象的多次复用.由于享元模式要求 ...

  2. 关于<meta NAME="keywords" CONTENT="">

    昨天终于以实习身份入职一家小创业公司,今天让我多看看别人的网页怎么写的,发现了一个以前都没关注过的东西. <meta name="keywords" content=&quo ...

  3. 初学者可能不知道的vue技巧

    前言 大家好,这里是@IT·平头哥联盟,我是首席甩锅官——老金,今天给大家分享的,一些日常中神秘而又简单的vue的实用小技巧,以及我在我司项目中实用vue的总结和坑,跟大家一起分享,希望能给其他攻城狮 ...

  4. layer设置弹出全屏

    //弹出即全屏 var index = layer.open({ type: , content: 'http://www.layui.com', area: ['300px', '195px'], ...

  5. IE8 window.open 不支持此接口 的问题解决

    在使用vs2010调试代码时,突然出现 window.open 不支持此接口的提示,开始认为是不是vs的问题,后来上网查询说是系统问题.我不想重装系统,之后发现是IE的问题,使用其他浏览器浏览系统不会 ...

  6. 关于maven source1.5报错

    是因为maven 默认是1.5编译的 <build>//加上这个配置,把编译给改掉试试 <pluginManagement> <plugins> <plugi ...

  7. web页面调用IOS的事件

    /** * js 调用ios的方法 * @param callback */ function connectWebViewJavascriptBridge(callback) { if (windo ...

  8. MyEclipse 2015 安装到配置一站式备忘

    目录 h1 2121 h1 2121

  9. CATransaction 知识

    CATransaction 事务类,可以对多个layer的属性同时进行修改.它分隐式事务,和显式事务. 区分隐式动画和隐式事务:隐式动画通过隐式事务实现动画 . 区分显式动画和显式事务:显式动画有多种 ...

  10. c语言 错误记录

    1.预处理错误 #include <>   //系统内部的 #include ""   // 自定义的 遇到 not find------解决方案:gcc -I 跟查找 ...