链接:https://ac.nowcoder.com/acm/contest/329/B
来源:牛客网

题目描述

处女座想出去比赛,但是又不知道学校能不能给到足够的经费。然而处女座是大众粉丝,有着很好的人缘,于是他找了一个在学校管经费的地方勤工俭学偷来了一份报销标准。

由于处女座是万人迷,所以他在中间途径的每一条线路上都会发生一些故事,也许是粉丝给他发了一个200元的微信红包,也许是和他的迷妹一起吃饭花了500元。

而经费负责人也实地考察了每一条路线,在每一条路上,也许是天降红包雨,也许是地生劫匪。每一条路上都有属于自己的奇遇。

而经费负责人也只能根据他的故事决定这一路批下来多少经费。他会找出从宁波到比赛地的最小花费,并以此作为标准给处女座打比赛。而处女座也会选择对他来说最小花费的路线,来节省使用。
处女座想知道,最终的经费是否够用,如果够还会剩下来多少钱。如果不够,他自己要自费掏出多少钱。(当然处女座和经费管理人都具有旅途中无限信贷额度,所有收入支出会在旅行结束后一起结算。)

输入描述:

输入文件第一行包含一个整数T,表示处女座要参加的比赛场数。对于每一场比赛,第一行包含两个整数N,M,分别表示旅行中的站点数(其中宁波的编号为1,比赛地的编号为N)和线路数。接下来M行,每一行包含5个整数u,v,c,cnz,jffzr,分别表示从u到v有一条单向的线路,这条线路的票价为c。处女座搭乘这条线路的时候,会得到cnz元(如果为负即为失去-cnz元);经费负责人搭乘这条线路的时候,会得到jffzr元(如果为负即为失去-jffzr元)。行程保证不会形成环,并保证一定能从宁波到达比赛地。

输出描述:

对于每一场比赛,如果经费负责人给出的经费绰绰有余,则先在一行输出"cnznb!!!",并在下一行输出他可以余下的经费;如果处女座的经费不够用,则先在一行输出"rip!!!",并在下一行输出他需要自费的金额;如果经费负责人给出的经费正好够处女座用,则输出一行"oof!!!"。(所有输出不含引号)

示例1

输入

复制

1
3 3
1 2 300 600 -600
2 3 100 -300 1
1 3 200 0 0

输出

复制

cnznb!!!
100

说明

处女座先走第一条路再走第二条路到达,总花费100元,经费负责人走第三条路,花费200元,处女座经费剩余100元

备注:

T≤10T≤10

2≤N≤10^5 2≤N≤10^5

1≤M≤2⋅10^5 1≤M≤2⋅10^5
1≤u,v≤N1≤u,v≤N
0≤c≤10^9 0≤c≤10^9
−10^9≤cnz,jffzr≤10^9

思路:

这个题目是求两个有负权值的最短路问题。这个题目的数据量用一般的最短路算法肯定不行。

因为题目中说了。这个图是有向无环图。所以如果进行拓扑排序的话,那么所有点都会进队列一遍。所以,我们可以进行一遍拓扑排序,在排序的过程中求一遍最短路。

这个题求的是最小费用,所以可能会很绕。

这二个题有些坑点。那么当求得两个最短路如果是负数,不是赚钱,而是费用为0.

代码:

#include <bits/stdc++.h>using namespace std;
#define ll long long
const int maxn = 2e5+100;
const int maxm = 1e5 + 100;
const ll INF=1e16;
int n, m;
int in[maxn];
ll dis[maxn];
struct Edge
{int to, next,va;Edge() {}Edge(int t,int n,int v){to = t;next = n;va=v;}
}edges[maxn];
int head[maxn], tot;void add_edge(int from, int to,int v)
{edges[tot] = Edge ( to, head[from],v);head[from] = tot++;in[to]++;
}bool topo()
{queue<int> Q;int sum=0;for(int i=1;i<=n;i++)if(in[i]==0)Q.push(1);dis[1]=0;while(!Q.empty()){int u=Q.front(); Q.pop();sum++;for(int e=head[u];e!=-1;e=edges[e].next){int v=edges[e].to;dis[v]=min(dis[v],dis[u]+edges[e].va);if(--in[v]==0){Q.push(v);}}}return sum==n;
}void init()
{memset(in, 0, sizeof(in));for(int i=0;i<=n;i++)dis[i]=INF;memset(head, -1, sizeof(head));tot = 0;
}
struct node1
{int u,v,w;
}w[maxn*2];int main()
{int t;scanf("%d",&t);while(t--){memset(w,0,sizeof(w));scanf("%d%d",&n,&m);init();for(int i=1;i<=m;i++){int u,v,c,w1,w2;scanf("%d%d%d%d%d",&u,&v,&c,&w1,&w2);add_edge(u,v,c-w1);w[i].u=u;w[i].v=v;w[i].w=c-w2;}topo();ll sum=dis[n];sum=max(0LL,sum);init();for(int i=1;i<=m;i++){add_edge(w[i].u,w[i].v,w[i].w);}topo();ll sum_1=dis[n];sum_1=max(sum_1,0LL);ll ans1=sum_1-sum;if(ans1>0){printf("cnznb!!!\n%lld\n",ans1);}else if(ans1==0){printf("oof!!!\n");}else{printf("rip!!!\n%lld\n",-ans1);}}return 0;
}

处女座的比赛资格(拓扑排序)相关推荐

  1. [ACM] hdu 1285 确定比赛 (拓扑排序)

    确定比赛 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  2. HDU-1285 确定比赛名次 拓扑排序

    确定比赛名次 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)           ...

  3. HDU 1285 确定比赛名次 拓扑排序(邻接矩阵 邻接表

    确定比赛名次 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Description ...

  4. 图论 —— AOV 网与拓扑排序

    [AOV网] 日常生活中,一项大的工程可以看作是由若干个子工程组成的集合,这些子工程之间必定存在一定的先后顺序,即某些子工程必须在其他的一些子工程完成后才能开始. 我们用有向图来表现子工程之间的先后关 ...

  5. 【拓扑排序】确定比赛名次

    HDU P1285 确定比赛名次 拓扑排序裸题qwq 注意:入度为一的点删掉之后,它的入度要更新为-1 这个题刷出了我人生中第一次PE 可还行qaq 我搜索PE是输出格式与标准输出不符, 结果发现语言 ...

  6. HDU 1285 - 确定比赛名次(拓扑排序)

    确定比赛名次 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  7. [ACM] hdu 1285 确定比赛名次 (拓扑排序)

    确定比赛名次 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  8. 图论--拓扑排序--HDU-1285确定比赛名次

    Problem Description 有N个比赛队(1<=N<=500),编号依次为1,2,3,....,N进行比赛,比赛结束后,裁判委员会要将所有参赛队伍从前往后依次排名,但现在裁判委 ...

  9. 拓扑排序 确定比赛名次

    确定比赛名次 Problem Description 有N个比赛队(1<=N<=500),编号依次为1,2,3,....,N进行比赛,比赛结束后,裁判委员会要将所有参赛队伍从前往后依次排名 ...

  10. 【HDU - 1285】确定比赛名次 (拓扑排序)

    题干: 有N个比赛队(1<=N<=500),编号依次为1,2,3,....,N进行比赛,比赛结束后,裁判委员会要将所有参赛队伍从前往后依次排名,但现在裁判委员会不能直接获得每个队的比赛成绩 ...

最新文章

  1. 刻意练习:LeetCode实战 -- Task17. 最长回文子串
  2. 云计算服务在小企业中的作用?
  3. 《陶哲轩实分析》引理17.2.4证明_导数的唯一性
  4. OAM Kubernetes 标准实现与核心依赖库发布 | 云原生生态周报 Vol. 52
  5. 二分查找的递归与非递归!
  6. Color the ball HDU - 1556 (线段树)
  7. python argparse nargs_Python | 使用argparse解析命令行参数
  8. 2015年《大数据》高被引论文Top10文章No.2——大数据时代的数据挖掘 —— 从应用的角度看大数据挖掘(上)...
  9. 遇到了arcgis server9.1 在web开发的问题
  10. IDEA 社区版进行 Web 开发
  11. xss.haozi.me通关记录
  12. Word中插入表格与柱状图饼状图技术经验分享
  13. Pentest Wiki Part5 提权
  14. 云-阿里云-百科:阿里云
  15. 这篇文章告诉你三个能给视频去水印的软件
  16. 手机APP开发之MIT Appinventor详细实战教程(九),工具箱的设计和MIT的基础知识讲解
  17. 【JEECG技术文档】JEECG平台对外接口JWT应用文档V3.7.2
  18. Fabric v2.3 下载二进制文件和镜像bootstrap.sh脚本解析
  19. 手机通过QQ发送图片到电脑端,电脑接收不到且显示图裂
  20. 酷早报:7月21日Web3加密行业新闻大汇总

热门文章

  1. DAY24:信息搜集
  2. 安装vc6出现couldn't find acme setup的解决办法
  3. 2020王道操作系统,数据结构,计算机网络,计算机组成原理PDF大合集+使用经验
  4. MATLAB学习笔记——数组
  5. Java使用for循环打印菱形
  6. 数据结构(C语言版)严蔚敏课后答案
  7. CentOS7完全卸载mysql5.7重装8.0
  8. Bootstrap 时间控件 datetimepicker
  9. arduino串口绘图_写了一个串口实时曲线绘制软件,分享给大家。不好轻拍
  10. Python处理Excel文件(一)