牛客寒假算法基础集训营3B 处女座的比赛资格(用拓扑排序解决DAG中的最短路)
链接:https://ac.nowcoder.com/acm/contest/329/B
来源:牛客网
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld
题目描述
处女座想知道,最终的经费是否够用,如果够还会剩下来多少钱。如果不够,他自己要自费掏出多少钱。(当然处女座和经费管理人都具有旅途中无限信贷额度,所有收入支出会在旅行结束后一起结算。)
输入描述:
输入文件第一行包含一个整数T,表示处女座要参加的比赛场数。 对于每一场比赛,第一行包含两个整数N,M,分别表示旅行中的站点数(其中宁波的编号为1,比赛地的编号为N)和线路数。 接下来M行,每一行包含5个整数u,v,c,cnz,jffzr,分别表示从u到v有一条单向的线路,这条线路的票价为c。处女座搭乘这条线路的时候,会得到cnz元(如果为负即为失去-cnz元);经费负责人搭乘这条线路的时候,会得到jffzr元(如果为负即为失去-jffzr元)。 行程保证不会形成环,并保证一定能从宁波到达比赛地。
输出描述:
对于每一场比赛,如果经费负责人给出的经费绰绰有余,则先在一行输出"cnznb!!!",并在下一行输出他可以余下的经费;如果处女座的经费不够用,则先在一行输出"rip!!!",并在下一行输出他需要自费的金额;如果经费负责人给出的经费正好够处女座用,则输出一行"oof!!!"。(所有输出不含引号)
备注:
1≤M≤2⋅1051≤M≤2⋅105
1≤u,v≤N1≤u,v≤N
0≤c≤1090≤c≤109
−109≤cnz,jffzr≤109−109≤cnz,jffzr≤109 解题思路:题意比较明显是一个有向无环图即DAG图的最短路。由于含有负权值的边,所以肯定不能使用dijkstra,开始以为用spfa就可以了,没想到还是太天真了,真是学的太少了。特殊 DAG 的性质使得 SPFA 算法无法在规定的时间限内求解出答案。考虑到 DAG 的特殊性,按照原图节点的拓扑顺序依次递推距离即可求解。
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=2e5+;
const ll INF=1e18;
struct Edge{
int to,next; ll cnz,jffzr;
}edge[*maxn];
int n,m,head[maxn],tot,Rudu[maxn];
ll dis[maxn];
ll min(ll a,ll b)
{
if(a>=b)return b;
return a;
}
ll max(ll a,ll b)
{
if(a>=b)return a;
return b;
}
void Add_Edge(int u,int v,ll c,ll d)
{
edge[tot].to=v;
edge[tot].cnz=c;
edge[tot].jffzr=d;
edge[tot].next=head[u];
head[u]=tot++;
}
void Topsort(int id)
{
queue<int> que;
while(que.size())que.pop();
for(int i=;i<=n;i++){
dis[i]=INF;
if(!Rudu[i])que.push(i);
}
dis[]=;
while(que.size())
{
int now=que.front();
que.pop();
for(int i=head[now];i!=-;i=edge[i].next){
int v=edge[i].to;
dis[v]=min(dis[v],dis[now]+(id==?edge[i].cnz:edge[i].jffzr));
Rudu[v]--;
if(Rudu[v]==)que.push(v);
}
}
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
tot=;
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++){
head[i]=-;
Rudu[i]=;
}
for(int i=;i<=m;i++)
{
int u,v; ll w,x,y;
scanf("%d%d%lld%lld%lld",&u,&v,&w,&x,&y);
Add_Edge(u,v,w-x,w-y);
Rudu[v]++;
}
Topsort();
ll ans1=max(,dis[n]);
Topsort();
ll ans2=max(,dis[n]);
if(ans2-ans1>){
puts("cnznb!!!");
cout<<ans2-ans1<<endl;
}
else if(ans2==ans1)puts("oof!!!");
else{
puts("rip!!!");
cout<<ans1-ans2<<endl;
}
}
return ;
}
牛客寒假算法基础集训营3B 处女座的比赛资格(用拓扑排序解决DAG中的最短路)的更多相关文章
- 牛客寒假算法基础集训营3处女座和小姐姐(三) (数位dp)
链接:https://ac.nowcoder.com/acm/contest/329/G来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言52428 ...
- 2020牛客寒假算法基础集训营2 J题可以回顾回顾
2020牛客寒假算法基础集训营2 A.做游戏 这是个签到题. #include <cstdio> #include <cstdlib> #include <cstring ...
- 2020牛客寒假算法基础集训营1 J题可以回顾回顾
2020牛客寒假算法基础集训营1 这套题整体来说还是很简单的. A.honoka和格点三角形 这个题目不是很难,不过要考虑周全,面积是1,那么底边的长度可以是1也可以是2, 注意底边1和2会有重复的, ...
- Applese 的毒气炸弹 G 牛客寒假算法基础集训营4(图论+最小生成树)
链接:https://ac.nowcoder.com/acm/contest/330/G来源:牛客网 Applese 的毒气炸弹 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262 ...
- 牛客寒假算法基础集训营4 I题 Applese 的回文串
链接:https://ac.nowcoder.com/acm/contest/330/I 来源:牛客网 自从 Applese 学会了字符串之后,精通各种字符串算法,比如--判断一个字符串是不是回文串. ...
- 牛客寒假算法基础集训营4 I Applese 的回文串
链接:https://ac.nowcoder.com/acm/contest/330/I来源:牛客网 自从 Applese 学会了字符串之后,精通各种字符串算法,比如……判断一个字符串是不是回文串. ...
- 牛客寒假算法基础集训营2 【处女座与复读机】DP最小编辑距离【模板题】
链接:https://ac.nowcoder.com/acm/contest/327/G来源:牛客网 一天,处女座在牛客算法群里发了一句“我好强啊”,引起无数的复读,可是处女座发现复读之后变成了“处女 ...
- 欧拉函数-gcd-快速幂(牛客寒假算法基础集训营1-D-小a与黄金街道)
题目描述: 链接:https://ac.nowcoder.com/acm/contest/317/D来源:牛客网小a和小b来到了一条布满了黄金的街道上.它们想要带几块黄金回去,然而这里的城管担心他们拿 ...
- 牛客寒假算法基础集训营4 F Applese 的大奖
链接:https://ac.nowcoder.com/acm/contest/330/H来源:牛客网 Applese 和它的小伙伴参加了一个促销的抽奖活动,活动的规则如下:有一个随机数生成器,能等概率 ...
随机推荐
- IIS 使用 HTTP重定向 修改 默认主页
1. 被自己坑死了 多了一个 正斜杠 浪费了好长好长的时间 2. 需求 直接输入ip地址 总是 弹出来 iis 的 welcome的界面 感觉很low 想要修改一下 曾经用过 reflesh 来修改过 ...
- [学习]UX 测试 5S 范围
最近被UX测试搞的死去活来的 郁闷坏了. 豆瓣上面有一个介绍: 好的框架总是简洁的. Strategy - Scope - Structure - Skeleton - Surface五个层面,用bo ...
- [转帖]SUSE Linux
历经坎坷多次易主,SUSE Linux路在何方? http://blog.itpub.net/11310314/viewspace-2638811/ 之前一直理不清楚 SUSE和RedHat的关系 甚 ...
- JavaScript lastIndexOf() 方法
<script type="text/javascript"> var str="0000.0000.0000.0000.0000.0000.0000.&qu ...
- PHP二维数组(或任意维数组)转换成一维数组的方法汇总(实用)
目录 1 array_reduce函数法 2 array_walk_recursive函数法 3 array_map函数法 假设有下面一个二维数组: $user = array( '0' => ...
- python之路--触发器, 储存过程, 事务
一. 触发器 使用触发器可以定制用户对某一张表的数据进行 [增, 删 ,改] 操作时前后的行为, (注意 没有查询),在进行增删改的时候出发的某个动作叫做 触发器. 其实就是在增删改的时候另外执行了 ...
- 莫烦keras学习自修第三天【回归问题】
1. 代码实战 #!/usr/bin/env python #!_*_ coding:UTF-8 _*_ import numpy as np # 这句话不知道是什么意思 np.random.seed ...
- falsk 项目中日志设置
app/__init__.py: 1 import logging from logging.handlers import RotatingFileHandler ''' 开发中使用DEBUG级别, ...
- dw擴展jquery
https://jingyan.baidu.com/article/90895e0fbbb65764ec6b0bd1.html
- java 中 的 字节流!
package cn.zhouzhou; import java.io.FileInputStream; import java.io.FileNotFoundException; import ja ...