题目链接: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…
不写普通模板了,还是需要优先队列优化的昂 #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<<]…
#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…
传送门:地铁 思路:拆点,最短路:拆点比较复杂,所以对边进行最短路,spfa会tle,所以改用Dijkstra(优先队列优化) 模板 /************************************************************** Problem: User: youmi Language: C++ Result: Accepted Time: Memory: *****************************************************…
最短路 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 41168    Accepted Submission(s): 17992 Problem Description 在每年的校赛里.全部进入决赛的同学都会获得一件非常美丽的t-shirt.可是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的.所以如今他们想要寻…
题意: 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这个点是由谁拆分出…
描述 这一天,他来到了一座深山的山脚下,因为只有这座深山中的一位隐者才知道这种药草的所在.但是上山的路错综复杂,由于小小猪的病情,晴天小猪想找一条需时最少的路到达山顶,但现在它一头雾水,所以向你求助. 山用一个三角形表示,从山顶依次向下有1段.2段.3段等山路,每一段用一个数字T(1<=T<=100)表示,代表晴天小猪在这一段山路上需要爬的时间,每一次它都可以朝左.右.左上.右上四个方向走.山是环形的.(注意:在任意一层的第一段也可以走到本层的最后一段或上一层的最后一段). 晴天小猪从山的左下…
借bzoj1624练了一下模板(虽然正解只是floyd) spfa: #include <cstdio> #include <cstring> #include <algorithm> #include <iostream> #include <vector> #include <queue> using namespace std; const int INF=100001; const int maxm=10001,maxn=10…
prim+优先队列模板: #include<stdio.h> //大概要这些头文件 #include<string.h> #include<queue> #include<vector> #include<algorithm> using namespace std; typedef pair<int,int> pii; ],next[],point[],val[],size,dist[]; //前向星及dist数组 ]; void…
qwq dij其实和prim挺像的,prim是找权值最小点,dij是找边, 用一个优先队列就可以在加入边的时候直接排序,避免了每次遍历更新min priority_queue <pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > > q; 这句话就能把大根堆转化为小根堆(pair中的第一个值first最小的在最上面), 同时pair<边权,序号>便于在对…