描述 这一天,他来到了一座深山的山脚下,因为只有这座深山中的一位隐者才知道这种药草的所在.但是上山的路错综复杂,由于小小猪的病情,晴天小猪想找一条需时最少的路到达山顶,但现在它一头雾水,所以向你求助. 山用一个三角形表示,从山顶依次向下有1段.2段.3段等山路,每一段用一个数字T(1<=T<=100)表示,代表晴天小猪在这一段山路上需要爬的时间,每一次它都可以朝左.右.左上.右上四个方向走.山是环形的.(注意:在任意一层的第一段也可以走到本层的最后一段或上一层的最后一段). 晴天小猪从山的左下…
P1006晴天小猪历险记之Hill Accepted 标签:晴天小猪历险记[显示标签]     背景 在很久很久以前,有一个动物村庄,那里是猪的乐园(^_^),村民们勤劳.勇敢.善良.团结……不过有一天,最小的小小猪生病了,而这种病是极其罕见的,因此大家都没有储存这种药物.所以晴天小猪自告奋勇,要去采取这种药草.于是,晴天小猪的传奇故事便由此展开…… 描述 这一天,他来到了一座深山的山脚下,因为只有这座深山中的一位隐者才知道这种药草的所在.但是上山的路错综复杂,由于小小猪的病情,晴天小猪想找一条…
传送门:地铁 思路:拆点,最短路:拆点比较复杂,所以对边进行最短路,spfa会tle,所以改用Dijkstra(优先队列优化) 模板 /************************************************************** Problem: User: youmi Language: C++ Result: Accepted Time: Memory: *****************************************************…
vijosP1006 晴天小猪历险记之Hill 链接:https://vijos.org/p/1006 [思路] 图上DP. 这个题的递推顺序是关键.先从上一行得到最小值,然后从本行比较最小值,注意本行.本行与上一行之间的第一段与最后一段是相通的. [代码] #include<cstdio> #include<iostream> #include<cstring> #define FOR(a,b,c) for(int a=(b);a<=(c);a++) using…
题意: n个点,m条边,问从1走到n的最短路,其中有K次机会可以让一条路的权值变成0.1≤N≤10000;1≤M≤500000;1≤K≤20 题解: 拆点,一个点拆成K个,分别表示到了这个点时还有多少次机会.(x,k)-->(y,k-1),cost=0 或 (x,k)-->(y,k),cost=a[i].d;这题数据比较大, 需要很多优化.(应该只是蒟蒻我才需要这么多优化..)1.不用spfa(时间复杂度不稳定),用dijkstra+优先队列优化2.拆点不拆边.g[i]表示i这个点是由谁拆分出…
不写普通模板了,还是需要优先队列优化的昂 #include<stdio.h> //基本需要的头文件 #include<string.h> #include<queue> #include<algorithm> #include<vector> using namespace std; typedef pair<int,int> pii; const int INF=0x3f3f3f3f; ; ; ],val[maxm<<]…
题目链接:https://vjudge.net/problem/POJ-2387 题意:给n个点(<=1000),m条边(<=2000),求结点n到结点1的最短路. 思路:dijkstra优先队列,复杂度O(nlogn). AC代码: #include<cstdio> #include<queue> #include<algorithm> using namespace std; ; const int inf=0x3f3f3f3f; int m,n,cnt…
https://vijos.org/p/1006 连边后跑点权的最短路 注意连边的时候左端点可以连到下一行的右端点,右端点可以连到下一行的左端点 #include <cstdio> #include <cstring> #include <cmath> #include <string> #include <iostream> #include <algorithm> #include <queue> #include &…
#include <cstdio> #include <cstring> #include <queue> #include <vector> #include <algorithm> #define INF 0x3F3F3F3F using namespace std; ); ); typedef pair<int, int> pii; struct cmp{ bool operator () (pii a, pii b){ ret…
Dijkstra算法的核心思想就是两步排序,一个是对于一个点而言,他的最小边要经过所有其他点最小边的测试才能确认,也就是说要在这其中找一个最大的边出来:第二个是对于每次循环而言的,每次的更新d数组都是为了要选出最短的距离. 对于每次出队列的点,都更新他所有的邻边 #include <iostream> #include <cstdio> #include <queue> #include <cstring> #define INF 65535 using n…