UVa1078 Steam Roller——拆点+最短路】的更多相关文章

题目链接 思路 把每个点拆成\(5\)个点\(id(x,y),id(x,y)+n,id(x,y)+2*n,id(x,y)+3*n,id(x,y)+4*n\),分别表示到这个点时的方向为上,右,下,左和静止点 非静止点的决策如下: 1.走到对应的同方向的非静止点,代价为\(w\) 2.走到对应的同方向的静止点,代价为\(2w\) 静止点的决策如下: 1.走到四联通的对应方向的非静止点,代价为\(2w\) 2.走到四联通的静止点,代价为\(2w\) 直接建图跑最短路就行了,源点为\((r1,c1)\…
题意:给定一个图,r 根横线, c 根竖线.告诉你起点和终点,然后从起点走,每条边有权值,如果是0,就表示无法通行.走的规则是:如果你在下个路要转弯,会使这段路的时间加倍,但是如果一条路同时是这样,那么也只算两倍.起点和终点他们相连的第一条边也算两倍.问你最短时间. 析:把每个点拆成 8 个点(r, c, dir, doubled)分别下一步走哪个方向,是不是要加倍,然后每次枚举上一条,和新边,枚举上一边是不是加倍之后的,然后判断是不是要转弯,然后计算加不加倍,最后跑一次最短路,就好了. 代码如…
题目描述 策策同学特别喜欢逛公园.公园可以看成一张N个点M条边构成的有向图,且没有 自环和重边.其中1号点是公园的入口,N号点是公园的出口,每条边有一个非负权值, 代表策策经过这条边所要花的时间. 策策每天都会去逛公园,他总是从1号点进去,从N号点出来. 策策喜欢新鲜的事物,它不希望有两天逛公园的路线完全一样,同时策策还是一个 特别热爱学习的好孩子,它不希望每天在逛公园这件事上花费太多的时间.如果1号点 到N号点的最短路长为d,那么策策只会喜欢长度不超过d+K的路线. 策策同学想知道总共有多少条…
题意:模拟了汽车的行驶过程,边上的权值为全速通过所消耗的时间,而起步(从起点出发的边).刹车(到终点结束的边).减速(即将拐弯的边).加速(刚完成拐弯的边)这四种不能达到全速的情况,消耗的时间为权值*2.问从起点到终点所消耗的最少时间. 这道题主要是建图,很复杂,无耻地照着书上的代码码了一遍.让状态搞糊涂了= = 注意: 1.grid[][][4]记录了点的上下左右四条边的权值,id[][][4][2]记录各个点. 2.到一个点的最短路可以是路过这个点再折返回来,e.g:1->2 c=17,2-…
题意: 给一个由n*m个正方形格子组成的矩形,其中每个格子的边都是可以走的,长度给定,规定:如果在进入该路前需要拐弯,或者走完该路需要拐弯,都是需要付出双倍距离的(每条路最多算2倍).问从起点到终点的最短路经长. 思路: 这个题目超级难搞,思路很简单,就是很麻烦!!!我将1个点4个方向的路长都记录下来,然后进行最短路,只要一个点的某个方向更新了,就进队.所有都考虑得差不多了,就是WA... 步骤 : (1)起点不进队,因为起点出发都需要双倍,况且,如果起点路长为0的话,其他点就不能路过起点了,所…
题意:有 n 个点,每个点有它所在的层数,最多有 n 层,相邻两层之间的点可以互相到达,消耗 c (但同一层并不能直接到达),然后还有一些额外的路径,可以在两点间互相到达,并且消耗一定费用.问 1 点到 n 点的最小花费 将每一层拆成两个点,分别为进入层和出发层,然后相邻层的出发层可以指向进入层,花费 c,每个点可以到达其出发层,而进入层可以到达该点,花费 0 ,最后建立其余双向边,最短路 #include<stdio.h> #include<string.h> #include&…
题目链接 题意:有 \(n\) 个城市,它们由 \(m\) 条双向道路连接,保证它们能够彼此到达.第 \(i\) 条道路连接 \(u_i,v_i\),需要花费 \(x_i\) 个银币,耗费 \(t_i\) 秒的时间.每个城市处都有兑换银币处,第 \(i\) 个城市中你可以用 \(1\) 个金币兑换 \(c_i\) 个银币,可以兑换无限次,不过兑换 \(1\) 次需要花费 \(d_i\) 秒的时间.你一开始在 \(1\) 号城市,有 \(s\) 个银币和无限多的金币,求到其它城市需要耗费的最小时间…
https://codeforces.com/contest/59/problem/E 原来以为不会..看了题解发现貌似自己其实是会的? 就是拆点最短路..拆成n^2个点,每个点用(i,j)表示,表示这样的状态:原图中当前在j,前一步在i 然后就跑bfs,两点(i1,j1),(i2,j2)之前有边,当且仅当j1=i2,且(i1,j1,j2)没有被ban掉,且原图中(i2,j2)间有边:用一些set之类的来存储某三元组是否被ban 复杂度好像不是很对?然而仔细想一下可以发现转移最多总共只有O(nm…
思路:考试的时候直接想出来了,又有点担心复杂度,不过还是打了,居然是直接A掉,开心啊. 我们发现,Ai<=7,这一定是很重要的条件,我们考虑状态压缩,去枚举路径中出现了哪些数字,然后我们把原来n个点拆成 我们枚举数字的最小公倍数 个,因为如果一个数模某个数等于0,那么模它的因数也一定是0,因此我们的思路就是拆点最短路. #include<cstdio> #include<cmath> #include<cstring> #include<algorithm&…
一句话题解 因为上篇AGC的写的有点长……估计这篇也短不了所以放个一句话题解方便查阅啥的吧QwQ 具体的题意代码题解还是往下翻…… ARC 058 D:简单容斥计数. E:用二进制表示放的数字,然后状压$DP$. F:$biset$优化$DP$预处理,乱搞贪心. ARC 059 D:傻题,存在长的合法子串就一定会存在短的. E:前缀和优化$DP$. F:每个长度为$len$的串出现的概率是相同的,求到长度为$len$的方案数然后除$2^{len}$. ARC 060 D:对$b$分大于根号和小于…