【题解】Leyni的汽车比赛
【题解】Leyni的汽车比赛
思维题?居然被我凑出来了
这种图论题先设这样一个状态
\]
表示从i到j,最多使用f个交通工具的最短路
转移的话,每辆车先自己跑一个Floyd,然后进去就好了,转移枚举中间点。
但是你说\(f\)很大,感觉这样做不行了,但是仔细思考一下,最多换\(n\)辆车就会到达终点,所以让\(f\)对\(n\)取min就好了。
这种分析复杂度的方法很好用,还有一个更典型的例子是,一个区间询问题,区间长度是\(100\),询问是\(1e5\)的,但是你每次询问只会\(O(n^2)\)的暴力,怎么过这个subtask? 直接记忆化啊!总共就\(100\times 90\)个不同的区间啊
于是我们获得了一个\(O(n^5)\)的做法,我以为可以过,但是有多组数据,交一发T了
for(register int t=1;t<=m;++t)
g[t].read(),g[t].gen();
for(register int t0=1;t0<=m;++t0)
for(register int f=1;f<=n+2;++f)
for(register int k=1;k<=n;++k)
for(register int t=1;t<=n;++t)
for(register int i=1;i<=n;++i)
ans[t][i][f]=Min(ans[t][i][f],ans[t][i][f-1],ans[t][k][f-1]+g[t0][k][i],ans[t][k][f-1]+ans[k][i][1]);
for(register int t=1;t<=r;++t){
register int t1=qr(),t2=qr(),t3=min(qr()+1,n+1);
printf("%d\n",ans[t1][t2][t3]);
}
代码中\(g[]\) 是我定义的结构体,里面是一个\(e[maxn][maxn]\),\(g[t].gen()\)是跑一遍floyd
考虑优化一下,由于我们是要求最小,我们看一下混乱不堪的转移,考虑在Min函数的第三个参数动动手脚,实际上,对于一个确定\(f\),我们求一个最小的\(g[t0][k][i]\)就好了,我们随便找个东西存一下就完事了。
实际上我这份转移靠感觉的代码做了这件事情,就是\(ans[t][k][f-1]+ans[k][i][1]\),这里\(ans[k][i][1]\)实际上就记录了最小的\(g[t0][k][i]\)。所以我们少枚举一个\(t0\),复杂度变为\(O(n^4)\)
本来这种思维题我是做不出来的,但d 是为啥我又写出来了?因为我发现可以通过观察代码的行为来优化算法。。。我用这种技巧已经帮助我在模拟赛里多拿了好几百分了23333333
没有退役全靠它
//@winlere
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std; typedef long long ll;
inline int qr(){
register int ret=0,f=0;
register char c=getchar();
while(c<48||c>57)f|=c==45,c=getchar();
while(c>=48&&c<=57) ret=ret*10+c-48,c=getchar();
return f?-ret:ret;
}
const int maxn=51;
const int inf=0x3f3f3f3f;
int ans[maxn][maxn][53];
int n,m,r;
struct Graph{
int e[maxn][maxn];
inline void read(){
for(register int t=1;t<=n;++t)
for(register int i=1;i<=n;++i)
e[t][i]=qr();
}
inline int* operator [](register int x){return e[x];}
inline void gen(){
for(register int k=1;k<=n;++k)
for(register int t=1;t<=n;++t)
for(register int i=1;i<=n;++i)
e[t][i]=min(e[t][i],e[t][k]+e[k][i]);
}
inline void print(){
for(register int t=1;t<=n;++t,printf("\n"))
for(register int i=1;i<=n;++i)
printf("%d ",e[t][i]);
}
}g[maxn];
inline int Min(const int&a,const int&b){if(a<b) return a; return b;}
inline int Min(const int&a,const int&b,const int&c){return Min(a,min(b,c));}
inline int Min(const int&a,const int&b,const int&c,const int&d){return Min(a,Min(b,c,d));}
int main(){
while(scanf("%d %d %d",&n,&m,&r)!=EOF){
for(register int t=0;t<=n;++t)
for(register int i=0;i<=n;++i)
for(register int k=0;k<=n+2;++k)
ans[t][i][k]=inf;
for(register int t=1;t<=n;++t) ans[t][t][0]=0;
for(register int t=1;t<=m;++t){
g[t].read(),g[t].gen();
for(register int i=1;i<=n;++i)
for(register int k=1;k<=n;++k)
ans[i][k][1]=min(ans[i][k][1],g[t][i][k]);
}
for(register int f=1;f<=n+2;++f)
for(register int k=1;k<=n;++k)
for(register int t=1;t<=n;++t)
for(register int i=1;i<=n;++i)
ans[t][i][f]=Min(ans[t][i][f],ans[t][i][f-1],ans[t][k][f-1]+ans[k][i][1]);
for(register int t=1;t<=r;++t){
register int t1=qr(),t2=qr(),t3=min(qr()+1,n+1);
printf("%d\n",ans[t1][t2][t3]);
}
}
return 0;
}
【题解】Leyni的汽车比赛的更多相关文章
- 题解-[HNOI2001]遥控赛车比赛
题解-[HNOI2001]遥控赛车比赛 前置知识:记忆化搜索.\(\texttt{Bfs}\). 参考资料 https://www.luogu.com.cn/blog/CYJian/solution- ...
- HLG 1400 汽车比赛
题目链接:http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=1400 结构体排序+树状数 ...
- 【题解】HNOI2013比赛
[题解][P3230 HNOI2013]比赛 将得分的序列化成样例给的那种表格,发现一行和一列是同时确定的.这个表格之前是正方形的,后来长宽都减去一,还是正方形.问题形式是递归的.这就启示我们可以把这 ...
- 【Codeforces Round #405 ( Div 2)】题解
Bear and Big Brother 签到题,直接模拟就可以了. Bear and Friendship Condition 满足只能是每个朋友圈中每个人和其他人都是朋友,这样的边数的确定的. 然 ...
- Hnoi2013题解 bzoj3139~3144
话说好久没写题(解)了.. 先贴份题解:http://wjmzbmr.com/archives/hnoi-2013-%E9%A2%98%E8%A7%A3/(LJ神题解..Lazycal表示看不懂..) ...
- Codeforces Round #524 (Div. 2)(前三题题解)
这场比赛手速场+数学场,像我这样读题都读不大懂的蒟蒻表示呵呵呵. 第四题搞了半天,大概想出来了,但来不及(中途家里网炸了)查错,于是我交了两次丢了100分.幸亏这次没有掉rating. 比赛传送门:h ...
- Educational Codeforces Round 53 (Rated for Div. 2) (前五题题解)
这场比赛没有打,后来补了一下,第五题数位dp好不容易才搞出来(我太菜啊). 比赛传送门:http://codeforces.com/contest/1073 A. Diverse Substring ...
- Lyft Level 5 Challenge 2018 - Final Round (Open Div. 2) (前三题题解)
这场比赛好毒瘤哇,看第四题好像是中国人出的,怕不是dllxl出的. 第四道什么鬼,互动题不说,花了四十五分钟看懂题目,都想砸电脑了.然后发现不会,互动题从来没做过. 不过这次新号上蓝名了(我才不告诉你 ...
- Codeforces Round #701 (Div. 2) 题解
由于今天实在是太自闭了就前来写场已经 AK 的 div.2 的题解了 这场比赛是我的 div.2 首 AK 哦 A 先特判 \(b=1\),强制将 \(b+1\) 否则容易发现答案最大为 \(\log ...
随机推荐
- 洛谷 2149 [SDOI2009]Elaxia的路线
题目描述 最近,Elaxia和w的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们 必须合理地安排两个人在一起的时间.Elaxia和w每天都要奔波于宿舍和实验室之间,他们 希望在节约时间的 ...
- Data Flow-File Read-网络距离
- web移动开发小贴士
1.判断手机类型 var u = navigator.userAgent; || u.indexOf(; //android var isiOS = !!u.match(/\(i[^;]+;( U;) ...
- 04Top K算法问题
本章阐述寻找最小的k个数的反面,即寻找最大的k个数,尽管寻找最大的k个树和寻找最小的k个数,本质上是一样的.但这个寻找最大的k个数的问题的实用范围更广,因为它牵扯到了一个Top K算法问题,以及有关搜 ...
- 洛谷P2709 小B的询问 莫队
小B有一个序列,包含N个1~K之间的整数.他一共有M个询问,每个询问给定一个区间[L..R],求Sigma(c(i)^2)的值,其中i的值从1到K,其中c(i)表示数字i在[L..R]中的重复次数.小 ...
- Spring Boot 集成日志logback + 控制台打印SQL
一: 控制台打印SQL application.properties中添加如下即可在控制台打印sql logging.level.com.fx.fxxt.mapper=debug 二:日志 因为Spr ...
- html5在微信中不允许放大缩小页面
在头部添加 <meta name="viewport" content="width=device-width, initial-scale=1, maximum- ...
- Python--day21--包
包: 包是一种通过使用‘.模块名’来组织python模块名称空间的方式. 1. 无论是import形式还是from...import形式,凡是在导入语句中(而不是在使用时)遇到带点的,都要第一时间提高 ...
- Vue的filter过滤器
一和二,请参考https://www.cnblogs.com/zui-ai-java/p/11109213.html 三.index.html <!DOCTYPE html> <ht ...
- 154th LeetCode Weekly Contest
A B D均比较简单.先说C题 K-Concatenation Maximum Sum Given an integer array arr and an integer k, modify the ...