首页 > TAG信息列表 > JLOI2011
[JLOI2011]飞行路线题解
The Captain @目录The Captain题目描述分析代码 题目描述 给定平面上的n个点,定义(x1,y1)到(x2,y2)的费用为min(|x1-x2|,|y1-y2|),求从1号点走到n号点的最小费用。 分析 我们第一时间会想把所有点都连上边,这样在跑一遍dijkstra,不就可以了吗? 但是 对于100%的数据,n<=200000 那我Luogu4568[JLOI2011][分层图] 飞行路线
Luogu4568[JLOI2011][分层图] 飞行路线 题目描述 Alice 和 Bob 现在要乘飞机旅行,他们选择了一家相对便宜的航空公司。该航空公司一共在 \(n\) 个城市设有业务,设这些城市分别标记为 \(0\) 到 \(n-1\),一共有 \(m\) 种航线,每种航线连接两个城市,并且航线有一定的价格。 Alice 和 Bob[JLOI2011]飞行路线题解
[JLOI2011]飞行路线题解 文章目录 [JLOI2011]飞行路线题解题目描述分析代码注意: 题目描述 Alice和Bob现在要乘飞机旅行,他们选择了一家相对便宜的航空公司。该航空公司一共在 n nP4305 [JLOI2011]不重复数字
题意 题目描述的很清楚。 思路 可以使用一个 map 来标记出现过的数,也就是 int 映射到一个 bool。 为了防止超时,记得使用 unordered_map,因为在这道题里面并不需要 map 进行内部的排序。 定义一个类型为 unordered_map 的 mp,将一个 int 映射到一个 bool。 每次输入的时候,判断这个值洛谷:P4568 [JLOI2011]飞行路线(分层图 / 二分错解(x))
洛谷:飞行路线 跟Acwing的 通信线路 一样,数据小一点,也是可以二分做的(具有单调性质) 只有部分一致,一个求最小路径花费、一个求路径上最大的边权的最小值 对路径上最大边权二分答案,不能保证路径花费(所有小于最大边权的边加起来)就最小 所以此题二分是错解(x) 分层图做法: 根据 k 次【Luogu P4568】[JLOI2011]飞行路线
链接: 洛谷 题目大意: 在一张图上,有 \(k\) 条边可以免代价,求 \(s\) 到 \(t\) 的最短路。 正文: 这是分层图最短路板子。建 \(k\) 层图,上一层到本次的边权为 \(0\)。很好理解。 代码: const int N = 1e6 + 10, M = 5e6 + 10; inline ll Read() { ll x = 0, f = 1; char c = getchar([JLOI2011]飞行路线
题目【拆点】【分层图】【最短路】 思路 拆点: 将一个状态 拆为 k+1 个状态 原来dijkstra(dist, j) 现在拆成k+1个状态, 状态变为(dist, j, cnt) cnt为当前已免费使用的次数 代码(dijkstra + 拆点) #include <bits/stdc++.h> using namespace std; const int N = 10010, M = 100洛谷 P4568 [JLOI2011]飞行路线
洛谷 P4568 [JLOI2011]飞行路线 Description 原题链接 Solution 分层图最短路 模板题。 简单来说,就是将原图复制成 \(k + 1\) 份,从上面一层向下一层对应的节点(原图中向谁连边谁就是对应节点)连边,权值为 0(表示免费坐飞机)。 看图片理解吧,这是样例的解释图 那么我们这道题基本就完成P4568 [JLOI2011]飞行路线
P4568 [JLOI2011]飞行路线 题意: n个城市,m个航班,你有k次免费坐航班的机会,问从s到t最少花费是多少? 题解: 分层图问题 简单说说什么是分层图: 其实就是将一个平面的图重新建图,有好几层 具体的说每层图之间各自连边与原图一样,但是相邻的两层图之间根据原来的关系进行连边 虽然是多洛谷 P4568 [JLOI2011]飞行路线
链接: P4568 题目描述 Alice 和 Bob 现在要乘飞机旅行,他们选择了一家相对便宜的航空公司。该航空公司一共在 \(n\) 个城市设有业务,设这些城市分别标记为 \(0\) 到 \(n-1\),一共有 \(m\) 种航线,每种航线连接两个城市,并且航线有一定的价格。 Alice 和 Bob 现在要从一个城市沿着航线到luogu P5482 [JLOI2011]不等式组
题面传送门 其实这道题是一眼秒了的。 因为\(A\)有正负所以显然按\(A\)正负开两颗平衡树维护即可。 但是并没有这么简单。 首先\(A=0\),这个要特判。 然后它还会重复撤销一个不等式多次所以也要特判。 大概没了。时间复杂度\(O(nlogn)\) code: #include<bits/stdc++.h> #define I iBZOJ2761: [JLOI2011]不重复数字(map)
Time Limit: 10 Sec Memory Limit: 128 MB Submit: 6356 Solved: 2407[Submit][Status][Discuss] Description 给出N个数,要求把其中重复的去掉,只保留第一次出现的数。 例如,给出的数为1 2 18 3 3 19 2 3 6 5 4,其中2和3有重复,去除后的结果为1 2 18 3 19 6 5 4。 Input[JLOI2011]飞行路线
题目链接:点这里 题解:这个题是一个很明显的分层图问题,我们要建立k+1层图,从代表从这一层到上一层免费,即代表用了一次的免费机会,所以我们最后是要求在第k层的终点,即代表已经用了这k次的免费机会。而且这个题数据相当毒瘤,我们还需要建立终点各个层的图,因为有可能最短的数据是没有分层图学习笔记 & [JLOI2011]飞行路线题解
分层图实际上就是把一个图复制好几份,代表一层一层,相邻的层之间的节点如果在原图有边就可以连边,同一层节点之间在原图有边也连边。 这里蓝边就是相邻层的边,黑边就是每层之间的边。原图就是 \((1,2),(1,3)\) 两条边。 Luogu P4568 [JLOI2011]飞行路线 给定一个图,每个图之间有边权,可洛谷P4305 [JLOI2011]不重复数字
题目链接:https://www.luogu.com.cn/problem/P4305 题目描述 给定 n 个数,要求把其中重复的去掉,只保留第一次出现的数。 输入格式 本题有多组数据。 第一行一个整数 T ,表示数据组数。 对于每组数据: 第一行一个整数 n 。 第二行 n 个数,表示给定的数。 输出格式 对于每组数据,输出一洛谷 P4305 [JLOI2011]不重复数字
题目链接:[JLOI2011]不重复数字 题解原发于我的blog 两个月不写题解了,今天来水一波 这题的目标就是去重,我们都知道c++有STL 先把整个序列按值排序一遍,在按值去重,再按原来的顺序排回去,就这么简单 注意使用\(sort\)时可能会打乱前后顺序,所以也要在排序时加入另外加入与位置有关的洛谷 4568 [JLOI2011]飞行路线
题目 一个无向图,每条边都有花费,可以有\(k\)次挑选边去除花费的机会,问从指定起点到指定终点的最小花费 分析 考虑用分层最短路完成,也就是在同一层走需要花费,不同层走不用花费,最终走到最底层,然后需要建\(k\)层,再跑一个\(\text{Dijkstra}\)就可以了 代码 #include <cstdio> #includBZOJ2763 [JLOI2011]飞行路线[最短路]
显然分层图裸题,做这题纯粹是为了填坑,不解释。 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<cmath> 6 #include<queue> 7 #define dbg(x) cerr << #x << " = " << x <[P4568][JLOI2011] 飞行路线 (分层图+最短路)
题意:有n个城市,m条航线,每条航线都有一个权值,并且还多了k次免费航行的机会,求1~n的最短路; 做法:分层图+最短路; 1.分层图;因为多了k次免费航行,所以可以考虑建出k+1个图,然后跑一遍最短路; 2.最短路;既然能写分层图,那么最短路应该都会了吧,可以用 dijkstra 或 SPFA ; 附上代码: #include<cstdiluogu P4568 [JLOI2011]飞行路线
前言 看到好多大佬都在跑分层图最短路,\(\text{DP}\) 解法的我瑟瑟发抖。。。 题目描述 给定一张 \(N\) 个点(点编号从 \(0\) 到 \(N-1\)),\(M\) 条边的无向带权图 \(G\)。给定常数 \(k\),你可以在图 \(G\) 中使不超过 \(k\) 条边的边权为 \(0\),求在该条件下点 \(s\) 到点 \(t\) 的最P4568 [JLOI2011]飞行路线 分层图最短路
思路:裸的分层图最短路 提交:1次 题解: 如思路 代码: #include<cstdio> #include<iostream> #include<cstring> #include<queue> #define R register int using namespace std; #define ull unsigned long long #define ll long long #define pause (for(R i=1;i<=1000P4568 [JLOI2011]飞行路线
P4568 [JLOI2011]飞行路线 Description Alice和Bob现在要乘飞机旅行,他们选择了一家相对便宜的航空公司。该航空公司一共在n个城市设有业务,设这些城市分别标记为0到n-1,一共有m种航线,每种航线连接两个城市,并且航线有一定的价格。 Alice和Bob现在要从一个城市沿着航线到达另一个城市,#牛客网 JLOI2011 飞行路线 (分层最短路)
题目描述 Alice和Bob现在要乘飞机旅行,他们选择了一家相对便宜的航空公司。该航空公司一共在n个城市设有业务,设这些城市分别标记为0到n-1,一共有m种航线,每种航线连接两个城市,并且航线有一定的价格。 Alice和Bob现在要从一个城市沿着航线到达另一个城市,途中可以进行转机。航空BZOJ 2761: [JLOI2011]不重复数字 set
Code: #include<bits/stdc++.h>#define maxn 100000 using namespace std;void setIO(string s){ string in=s+".in"; freopen(in.c_str(),"r",stdin); }set<int>S; set<int>::iterator it; int arr[maxn]; inline void solve(){ intluogu P4568 [JLOI2011]飞行路线
传送 gg给的题解 这道题的k很小,把k看作一种状态,可以考虑用分层的方法解决。 把每个点分成k个,dis[x][k] 代表使用了k次免费机会,到达x的最短距离。 从u到v,可以不使用免费机会,费用为val,或者使用免费机会,边权为0。 那么连边的时候,每条边实际要连2*(k+1)条:(i = 0~k) 从[x][i]到[y][i],边