LOJ3156

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

看到 \(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

[NOI2019]回家路线相关推荐

  1. luogu P5468 [NOI2019]回家路线 (斜率优化、DP)

    题目链接: (luogu) https://www.luogu.org/problemnew/show/P5468 题解: 爆long long毁一生 我太菜了,这题这么简单考场上居然没想到正解-- ...

  2. 航天器的“回家路线”有几种

    有些航天器,如返回式卫星.载人飞船和航天飞机等,在完成任务后要返回地球.它们的"回家路线",即从脱离运行轨道到降落地面这一段的飞行轨迹叫返回轨道. 根据航天器在返回轨道上所受阻力和 ...

  3. LOJ 3156: 「NOI2019」回家路线

    题目传送门:LOJ #3156. 题意简述: 有一张 \(n\) 个点 \(m\) 条边的有向图,边有两个权值 \(p_i\) 和 \(q_i\)(\(p_i<q_i\))表示若 \(p_i\) ...

  4. 【NOI2019】回家路线【无后效性dp状态设计】【斜率优化】

    传送门 题意:给定MMM个班车,每个班车pip_ipi​时刻从xix_ixi​发车qiq_iqi​到达yiy_iyi​,等车ttt时间花费代价At2+Bt+CAt^2+Bt+CAt2+Bt+C,在tt ...

  5. LOJ#3156. 「NOI2019」回家路线(前缀和优化建图+for循环+凸包)

    传送门 来一发大常数做法(然而网络赛的时候凸包插点的方向写反了...40pts40pts40pts滚了什么我居然还有40) 对于一条边(u,v,p,q)(u,v,p,q)(u,v,p,q),我们把二元 ...

  6. 洛谷P6302:回家路线(斜率优化)

    解析 <论什么是合理的实现> 本题dp的斜率式子还是不难 恶心在其他地方 由于不能时光倒流,新点必须在q时间后再插入 因此我们开一个堆来按找q升序排列,算完一个点就塞到堆里,每次把当前可以 ...

  7. 2020.6月做题记录

    长期计划 SAM专题 date:2020.05.21-2020.06.01 基础类: Problem Finished P3804 [模板]后缀自动机 (SAM) √√√ SP1811 LCS - L ...

  8. 四种类型的数据分析模式

    在这篇博文中,我们聚焦于在数据科学领域所遇到的四种类型的数据分析模式:描述型.诊断型.预测型和指导型. 当我与刚涉足数据科学领域的年轻分析师们交谈时,通常,我会问他们认为什么是数据科学家最重要的能力. ...

  9. 我泡在GitHub上的177天 by Ryan Seys

    我泡在GitHub上的177天 这是一个关于我如何连续177天(将近半年)泡在GitHub上不间断地贡献代码的故事.我会谈到我为什么要这么做,以及为什么你也应该效仿,或者至少做点类似的事情.这是一个关 ...

最新文章

  1. java中实现选择文件_Java 实现文件选择对话框及功能
  2. 丰度决定了细菌在复杂群落中的功能作用
  3. 2016级算法第一次练习赛-E.AlvinZH的儿时回忆——蛙声一片
  4. xdebug 远程调试
  5. 运行catia_教程 | CATIA宏的录制及应用
  6. Today is weekend不是应该一定会输出吗
  7. 4轮拿下字节Offer,面试题复盘(含答案)
  8. Mysql 设置问题,当使用一些开源的软件动态安装MYSQL数据库后,发现里面的中文全是乱码。...
  9. 内存分配-堆-栈-静态区
  10. Flink电商实时数仓项目04-DWS层
  11. goldengate 检查点的理解
  12. 通俗易懂的傅立叶级数理解
  13. C#读取MP3文件的专辑图片和ID3V2Tag信息(带代码)
  14. 区块链MMO游戏该如何设计Token经济?
  15. c语言三阶素数魔方阵,C语言 三阶魔方阵
  16. C#时间格式化显示AM/PM
  17. 女工程师独家揭秘:双11秘密武器阿里云数据库团队故事
  18. CTFSHOW-misc
  19. 精品科技感ppt模板,可以用作工作汇报,年终总结,需要的小伙伴直接拿走
  20. 解决了dhcpd启动失败

热门文章

  1. poj 3071 Football
  2. C#调用WebService实例和开发(转)
  3. BZOJ 2004 公交线路(状压DP+矩阵快速幂)
  4. jmeter上传文件搞了一天,才搞定,没高人帮忙效率就是低,赶紧记下来,以备后用...
  5. ruby中正则表达式最小匹配与最大匹配
  6. C++之构造函数和析构函数强化
  7. 数据结构7.3_图的遍历
  8. C语言指针,申请、释放内存,线程
  9. postgresql调优
  10. 远程客户端连接MysqL数据库太慢解决方案