[luogu7831]Travelling Merchant
考虑不断找到以下两种类型的边,并维护答案:
1.终点出度为0的边,那么此时即令$ans_{x}=\min(ans_{x},\max(r,ans_{y}-p))$
2.(在没有"终点出度为0的边时",即优先删除第1类边)剩余边中$r$最大的边,注意到能走到的每一个点都有出边,且其限制$r$都更小,那么即可令$ans_{x}=\min(ans_{x},r)$
进一步的,在维护答案后,注意到如果答案比该限制小,那么一定可以不用这条边,因此删去该边即可
关于此过程的维护,维护一个队列记录所有出度为0的点,以及将所有边先按照$r$从小到大排序即可
时间复杂度为$o(m\log m)$(排序),可以通过

1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 200005
4 #define oo 0x3f3f3f3f
5 struct Data{
6 int x,y,r,p;
7 bool operator < (const Data &k)const{
8 return r>k.r;
9 }
10 }e[N];
11 queue<int>q;
12 vector<int>v[N];
13 int n,m,r[N],vis[N],ans[N];
14 void del(int k){
15 vis[k]=1;
16 if (--r[e[k].x]==0)q.push(e[k].x);
17 }
18 int main(){
19 scanf("%d%d",&n,&m);
20 for(int i=1;i<=m;i++)scanf("%d%d%d%d",&e[i].x,&e[i].y,&e[i].r,&e[i].p);
21 sort(e+1,e+m+1);
22 for(int i=1;i<=m;i++){
23 r[e[i].x]++;
24 v[e[i].y].push_back(i);
25 }
26 memset(ans,oo,sizeof(ans));
27 for(int i=1;i<=n;i++)
28 if (!r[i])q.push(i);
29 for(int i=1;i<=m;i++){
30 while (!q.empty()){
31 int k=q.front();
32 q.pop();
33 for(int i=0;i<v[k].size();i++){
34 int x=v[k][i];
35 if (!vis[x]){
36 if (ans[k]!=oo)ans[e[x].x]=min(ans[e[x].x],max(e[x].r,ans[k]-e[x].p));
37 del(x);
38 }
39 }
40 }
41 if (!vis[i]){
42 ans[e[i].x]=min(ans[e[i].x],e[i].r);
43 del(i);
44 }
45 }
46 for(int i=1;i<=n;i++)
47 if (ans[i]==oo)ans[i]=-1;
48 for(int i=1;i<n;i++)printf("%d ",ans[i]);
49 printf("%d\n",ans[n]);
50 return 0;
51 }
[luogu7831]Travelling Merchant的更多相关文章
- ACM: 限时训练题解- Travelling Salesman-最小生成树
Travelling Salesman After leaving Yemen, Bahosain now works as a salesman in Jordan. He spends mos ...
- Codeforce - Travelling Salesman
After leaving Yemen, Bahosain now works as a salesman in Jordan. He spends most of his time travelli ...
- [最近公共祖先] POJ 3728 The merchant
The merchant Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 4556 Accepted: 1576 Desc ...
- POJ 3278 The merchant
传送门 Time Limit: 3000MS Memory Limit: 65536K Description There are N cities in a country, and there i ...
- Travelling
Travelling Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- URAL 1077 Travelling Tours(统计无向图中环的数目)
Travelling Tours Time limit: 1.0 secondMemory limit: 64 MB There are N cities numbered from 1 to N ( ...
- HDU-3001 Travelling
http://acm.hdu.edu.cn/showproblem.php?pid=3001 从任何一个点出发,去到达所有的点,但每个点只能到达2次,使用的经费最小.三进制 Travelling Ti ...
- Bzoj 1616: [Usaco2008 Mar]Cow Travelling游荡的奶牛 动态规划
1616: [Usaco2008 Mar]Cow Travelling游荡的奶牛 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1006 Solved: ...
- BZOJ1616: [Usaco2008 Mar]Cow Travelling游荡的奶牛
1616: [Usaco2008 Mar]Cow Travelling游荡的奶牛 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 762 Solved: ...
随机推荐
- 细说JUC的线程池架构
前言 线程的创建是需要JVM和OS(操作系统)相互配合的,一次的创建要花费许多的资源. 1.首先,JVM要为该线程分配堆栈和初始化大量内存块,栈内存至少是1MB. 2.其次便是要进行系统的调用,在OS ...
- 从0到1使用Kubernetes系列——Kubernetes入门
基本概念 Docker 是什么 Docker 起初是 dotCloud 公司创始人 Solomon Hykes 在法国的时候发起的一项公司内部项目,Docker 是基于 dotCloud 公司多年云服 ...
- Initialize this repository with a README
在gitHub创建项目时,有很多小伙伴不太清楚 Initialize this repository with a README 在什么情况下需要勾选,在这里简单说明 如下: 1. 翻译 如果要导入现 ...
- 洛谷4475 巧克力王国(KD-Tree + 维护子树和)
(嘤嘤嘤 又是一个自闭了一晚上的题) qwq果然不是平面上的点的问题,也可以直接用KDTree打暴力 我们对于巧克力直接建kdtree 维护一个\(mx[i],mn[i]\) 但是有一个非常不友好的事 ...
- dubbo注册中心占位符无法解析问题(二)
dubbo注册中心占位符无法解析问题 前面分析了dubbo注册中心占位符无法解析的问题. 并给出了2种解决办法: 降低mybatis-spring的版本至2.0.1及以下 自定义MapperScann ...
- 初学Python-day12 装饰器函数
装饰器 1.概念 本质就是一个Python函数,其他函数在本身不变的情况下去增加额外的功能,装饰器的返回值是一个函数. 常用的场景:插入日志,事务处理,缓存,权限校验等. 2.普通函数回顾 1 def ...
- python反序列化1(__reduce__)
part1:不求甚解的复现 对于服务端源码: 编写恶意序列化对象生成程序: 将生成的恶意序列化对象输入服务端user,使其执行系统命令.(上面那俩其实都行) part2:原理解释 b'xxx'是 ...
- Jupyter Notebook配置多个kernel
Jupyter Notebook配置多个kernel 前言: 在anaconda下配置了多个环境,而Jupiter Notebook只是安装在base环境下,为了能在Jupiter Notebook中 ...
- 实用小技巧:Notepad++直接连接Linux
实用小技巧:Notepad++直接连接Linux 前言 号称编辑器之神的Vim对于只会用几个基础操作的本人而言,在编辑一些大型文本有那么些力不从心: 平时都是通过Xftp拖到本地,修改完后再覆盖回去: ...
- 设计AOV网拓扑排序的算法
拓扑排序 对一个有向图构造拓扑序列的过程称为拓扑排序(不唯一) 思想 从AOV网选择一个没有前驱的顶点并输出 从AOV网中删去该顶点,并且删去所有以该顶点为尾的弧 重复上述两步,直到全部顶点都被输出, ...