[NOI2019]回家路线

LOJ3156

题面就不放了 , 放一下数据范围 .
5d2dc167cbf9976531.png

看到 \(n<=2000,m<=4000\) 就想到直接 \(dfs\) 到底 , 居然就过了前 \(4\)个 样例 , 最后一个要 \(2s\) . 后来写了 \(A=B=0\)\(5\) 分 , 我知道写的是错的 , 还是交了以下这份代码 . ( LOJ 数据应该是官方数据 ) 得分 \(70\) .

晚上到 LOJ 上一测 , 发现如果直接跑我的暴力有 \(80\) 分 , 又到 \(AC\) 记录里面随便看了一篇比较优秀的 , 改在后面 .

#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cassert>
#include<queue>
#define debug(...) fprintf(stderr,__VA_ARGS__)
#define Debug(x) cout<<#x<<"="<<x<<endl
using namespace std;
typedef long long LL;
const int INF=1e9+7;
inline LL read(){register LL x=0,f=1;register char c=getchar();while(c<48||c>57){if(c=='-')f=-1;c=getchar();}while(c>=48&&c<=57)x=(x<<3)+(x<<1)+(c&15),c=getchar();return f*x;
}const int N=100005;
const int M=200005;struct Edge{int v,s,t,nxt;
}e[M];
int first[N],Ecnt=0;
inline void Add_edge(int u,int v,int s,int t){e[++Ecnt]=(Edge){v,s,t,first[u]};first[u]=Ecnt;
}int n, m, A, B, C;inline LL calc(int x){return 1ll * A * x * x + 1ll * B * x + C;
}namespace baoli{LL ans = INF;inline void dfs(int u, int time, LL cost){if(u == n){ans = min(ans, cost + time);}for(int i = first[u]; i; i = e[i].nxt){int v = e[i].v, s = e[i].s, t = e[i].t;if(s < time) continue;dfs(v, t, cost + calc(s - time));}}inline void main(){dfs(1, 0, 0);printf("%lld\n", ans);exit(0);}
};namespace Subtask1{ // A == 0 && B == 0int dis[N], time[N];queue <int> q;LL ans = INF;inline void Return(LL ans){printf("%lld\n", ans);exit(0);}inline void main(){q.push(1);memset(dis, 0x3f, sizeof dis);dis[1] = 0;while(!q.empty()){int u = q.front(); q.pop();for(int i = first[u]; i; i = e[i].nxt){int v = e[i].v;if(time[u] > e[i].s) continue;if(dis[u] + 1 < dis[v]){dis[v] = dis[u] + 1;time[v] = e[i].t;q.push(v);}if(v == n) ans = min(ans, 1ll * (dis[u] + 1 + 1) * C + e[i].t);}}Return(ans);assert(false);}/*inline void main(){q.push((Node){1, 0, 0});while(!q.empty()){int u = q.front().x, d = q.front().dis, t = q.front().time; q.pop();for(int i = first[u]; i; i = e[i].nxt){int v = e[i].v;if(e[i].t < t) continue;if(}}}*/
};int main(){
#ifndef filefreopen("route.in","r",stdin);freopen("route.out","w",stdout);
#endifn = read(), m = read(), A = read(), B = read(), C = read();for(register int i = 1; i <= m; ++i){register int x = read(), y = read(), p = read(), q = read();Add_edge(x, y, p, q);}if(n <= 2000 && m <= 4000) baoli::main();if(A == 0 && B == 0) Subtask1::main();
}

LOJ上的一份AC代码

我没注意到时间 \(q<=1000\) , 这样的话 \(O(nq)=O(1e8)\) 应该可以卡过?
直接 \(dp\) 有人得了 95分 . 把列车 按照时间排序 , 再依次更新 , 这样 \(1e8\) 就跑不满 , 直接就过了 . 可以用 \(vector\) 存状态 .
对于这个数据范围就当 \(O(nq)\) 是正解好了 .

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<vector>
#define debug(...) fprintf(stderr,__VA_ARGS__)
#define Debug(x) cout<<#x<<"="<<x<<endl
using namespace std;
typedef long long LL;
const LL INF=1e18+7;
inline LL read(){register LL x=0,f=1;register char c=getchar();while(c<48||c>57){if(c=='-')f=-1;c=getchar();}while(c>=48&&c<=57)x=(x<<3)+(x<<1)+(c&15),c=getchar();return f*x;
}const int N = 1e5 + 5;
const int M = 2e5 + 5;struct Node{int x, y, p, q;
}a[M];
inline bool cmp1(Node a, Node b){if(a.p == b.p) return a.q < b.q;return a.p < b.p;
}vector <LL> f[N];
vector <int> t[N];
int n, m, A, B, C;inline LL calc(int x){return 1ll * A * x * x + 1ll * B * x + C;
}int main(){
#ifndef filefreopen("route.in","r",stdin);freopen("route.out","w",stdout);
#endifn = read(), m = read(), A = read(), B = read(), C = read();for(int i = 1; i <= m; ++i){a[i].x = read(), a[i].y = read(), a[i].p = read(), a[i].q = read();}sort(a + 1, a + m + 1, cmp1);f[1].push_back(0), t[1].push_back(0);for(int i = 1; i <= m; ++i){int x = a[i].x, y = a[i].y, p = a[i].p, q = a[i].q;int tt = -1;for(int j = 0; j < t[y].size(); ++j)if(t[y][j] == q) {tt = j; break;}for(int j = 0; j < f[x].size(); ++j){if(t[x][j] > p) continue;int len = p - t[x][j];if(tt == -1){f[y].push_back(f[x][j] + calc(len));t[y].push_back(q);tt = f[y].size() - 1;}else if(f[x][j] + calc(len) < f[y][tt]){f[y][tt] = f[x][j] + calc(len);}}}LL ans = INF;for(int i = 0; i < f[n].size(); ++i)ans = min(ans, f[n][i] + t[n][i]);printf("%lld\n", ans);
}

转载于:https://www.cnblogs.com/lizehon/p/11197337.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/461890.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

重定位——重定位的简介与操作(涉及位置无关码)

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 参考博客&#xff1a;位置无关码、位置有关码 - biaohc - 博客园 一、链接地址与运行地址 1、链接地址 链接地址&#xff0c;是指程序员通过Makefile中“ -Ttext xxx ”或者在链接脚本中指定的地址…

OpenCV学习(27) 直方图(4)

我们可以利用OpenCV的直方图&#xff0c;backproject直方图和meanshift算法来跟踪物体。下面通过简单的例子来说明如何实现跟踪算法&#xff0c;我们有两幅狒狒的图片&#xff0c;如下图所示&#xff1a;我们首先在左图中框选狒狒的脸&#xff0c;计算出框选区域的色度(HSV空间…

MySQL源码编译与初始化

MySQL源码编译与初始化 链接&#xff1a;https://pan.baidu.com/s/1ANGg3Kd_28BzQrA5ya17fQ 提取码&#xff1a;ekpy 复制这段内容后打开百度网盘手机App&#xff0c;操作更方便哦 1.MySQL简介 1.1数据库有很多种类&#xff1a; 关系型数据库--->MySQL Oracle非关系型数据库…

uboot中的虚拟地址映射

1、DRAM有效范围 &#xff08;1&#xff09;DMC0上允许的地址范围是20000000-3FFFFFFF&#xff08;一共是512MB&#xff09;&#xff0c;而X210开发板实际只接了256MB物理内存&#xff0c;SoC允许我们给这256MB挑选地址范围。在裸机中DMC0的地址范围是0x20000000-0x2FFFFFFF&am…

.net remoting 技术

Remoting编辑目 录 1简介 2主要元素 3两种通道 4激活方式 5对象定义 6服务器 7客户 8基础补充 9小结 1简介 什么是Remoting&#xff0c;简而言之&#xff0c;我们可以将其看作是一种分布式处理方式 。从微软的产品角度来看&#xff0c;可以说Remoting就是DCOM的一种升级&#x…

浪客剑心:位图法Bitmap算法分析

看了博客园里一篇文章《一道腾讯前端试题&#xff0c;谁来试试身手》&#xff0c;正好以前了解过位图法&#xff0c;确实不错。位图法适用于大规模数据&#xff0c;但数据状态又不是很多的情况。通常是用来判断某个数据存不存在&#xff0c;如可标记1为存在&#xff0c;0为不存…

GoogLeNet结构

Inception V1 GoogLeNet结构&#xff08;Inception V1&#xff09; 输入为224x224的RGB图像&#xff0c;‘#3x3 reduce’和‘#5x5 reduce’表示3x3和5x5卷积之前1x1的卷积核的个数。 转载于:https://www.cnblogs.com/Peyton-Li/p/11201038.html

uboot的移植——移植三星官方的uboot到x210开发板

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 一、移植总结 二、移植过程 1、获取三星官方版本的uboot &#xff08;1&#xff09;由于X210开发板使用S5PV210这款CPU&#xff0c;因此我们应该寻找一块使用相同CPU的开发板&#xff0c;然后以这块…

Hadoop 文件命令

为什么80%的码农都做不了架构师&#xff1f;>>> * 文件操作 * 查看目录文件 * $ hadoop dfs -ls /user/cl * * 创建文件目录 * $ hadoop dfs -mkdir /user/cl/temp * * 删除文件 * $ hadoop dfs -rm /user/cl/temp/a.txt * * 删除目录与目录下所有文件 …

Swans and ducks, Piešťany, Slovakia

What Makes This a Photo of the Day? I love the slightly off-kilter composition here, with the cluster of birds near the bottom of the frame. This gives a sense of movement and allows the eye to take in the peripheral elements—the ripples of the water and…

python day15

今日内容 昨日内容补充: 对于两个文件中的互相导入md模块问题分析: x 1from md import xprint(x)# md中的xfrom md import xx 1000print(x)# 当前文件中的x __all__ 列表写什么,执行导入语句那个文件就能拿到什么; __all__不写的情况,默认是将所在文件所有的名字都暴露给导入…

如何有效抓取SQL Server的BLOCKING信息

2019独角兽企业重金招聘Python工程师标准>>> SQL Server允许并发操作&#xff0c;BLOCKING是指在某一操作没有完成之前&#xff0c;其他操作必须等待&#xff0c;以便于保证数据的完整性。BLOCKING的解决方法要查看BLOCKING的头是什么&#xff0c;为什么BLOCKING头上…

iOS开发篇——OC 协议和代理设计模式介绍

蓝鸥iOS培训讲师推荐&#xff1a;好久没和大家沟通了&#xff0c;没和大家沟通了&#xff0c;今天就和大家说说有关OC内容协议和代理设计模式。首先要讲的是协议一、协议OC中的协议和接口有些相似&#xff0c;协议中定义的方法&#xff0c;在类中实现。协议一般情况下是用来实现…

uboot的移植——移植uboot官方的uboot到x210开发板

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 参考内容 uboot——官网下载直接移植(一) - biaohc - 博客园 uboot——官网下载直接移植(二) - biaohc - 博客园 uboot移植&#xff08;一&#xff09;配置过程分析_LouisGou的博客-CSDN博客 获取…

[转载]使用Vitamio打造自己的Android万能播放器(7)——在线播放(下载视频)...

前言 本章将实现非常实用的功能——下载在线视频。涉及到多线程、线程更新UI等技术&#xff0c;还需思考产品的设计&#xff0c;如何将新加的功能更好的融入到现有的产品中&#xff0c;并不是简单的加一个界面就行了&#xff0c;欢迎大家交流产品设计和技术细节实现&#xff01…

Hibernate上路_16-继承关系映射

2019独角兽企业重金招聘Python工程师标准>>> 例&#xff1a;员工Employee分为正式工SalaryEmployee和临时工HourEmployee。子类表的字段都不能使用非空约束。 1.三种继承关系的建表方式&#xff1a; 1&#xff09;父类、子类在同一张表&#xff0c;表中有“辨别者…

C++起航篇——bool类型,输入输出,命名空间

以下内容源于慕课网http://www.imooc.com/course/list?ccplusplus的学习整理&#xff0c;如有侵权&#xff0c;请告知删除。 慕课网学习内容 一、起航 二、离航 三、远征 封装继承多态模板 1、c的新特征 &#xff08;1&#xff09;新数据类型 bool &#xff08;true和fals…

C++离航篇——引用,const

以下内容源于http://www.imooc.com/learn/381的学习整理&#xff0c;如有侵权&#xff0c;请告知删除。 一、引用 &#xff08;1&#xff09;引用即定义别名 对引用进行操作即对本身操作&#xff1b;int a10; int &ba; //定义了a的别名b&#xff1b;注意别名是不包括&…

【广搜】棋盘游戏

题目描述 在一个4*4的棋盘上有8个黑棋和8个白棋&#xff0c;当且仅当两个格子有公共边&#xff0c;这两个格子上的棋是相邻的。移动棋子的规则是交换相邻两个棋子。现在给出一个初始棋盘和一个最终棋盘&#xff0c;要求你找出一个最短的移动序列使初始棋盘变为最终棋盘。Klux说…