摘要:平面图最小割转最短路书上是说以边为结点建图但是我觉得好像以每块空白区域为结点建图会更自然点。把矩形的右上方编号为0,左下方编号为1,分别为起点终点//#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;typedef long long ll;typedef
阅读全文
摘要:以(i,j) 为结点建图,其中i表示目前已经到过行程单上的前i个城市,j是目前在哪个城市。注意1.起点是行程单上的第一个城市2.城市的编号会很大,要重新编号。//#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;typedef long long ll;t
阅读全文
摘要:把一个点(r,c)拆成(r,c,dir,doubled)八个点表示上个点是从dir方向到(r,c)的,doubled表示那条边是否已经加倍。而后就是考虑清楚细节,建图。最后跑最短路。//#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;typedef lo
阅读全文
摘要:设sum(u)为在结点u上的全部操作叠加(操作顺序无影响)则原边w(a,b)变为w(a,b)+sum(a)-sum(b)二分答案x,则w(a,b)+sum(a)-sum(b)>=x,即sum(b)-sum(a)#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;typedef long long ll;typedef unsigned long long ull;typedef pair pii
阅读全文
摘要:求平均值最小的环,如果平均值最小为x,则如果把每条边的权值都减(x+1),那么新图将会有负环,用bellman ford判断。//#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;typedef long long ll;typedef unsigned
阅读全文
摘要:d[u]表示从u离开时最少需要多少才能达到要求。从终点开始往前更新,求出前继结点最少需要的d是多少//#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;typedef long long ll;typedef unsigned long long ull;
阅读全文
摘要:对每个点求最短路,同时求出最短路树。枚举每条边,如果这条边在最短路树上,那么删掉这条边就需要重新计算最短路,否则不需要。//#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;typedef long long ll;typedef unsigned lon
阅读全文
摘要:求出最短路后,如果d[A]#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;typedef long long ll;typedef unsigned long long ull;typedef pair pii;#define pb(a) push(a)#define INF 0x1f1f1f1f#define lson idx T min(const T& a,const T&
阅读全文
摘要:分别求出以S和E为起点的最短路,然后枚举每一张商务票 (u,v)求 A(u) + w(u,v) + B(v)//#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;typedef long long ll;typedef unsigned long long
阅读全文
摘要:不难想到是2-sat,这题最繁的就是加边的了//#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;typedef long long ll;typedef unsigned long long ull;typedef pair pii;#define pb
阅读全文
摘要:考虑一颗普通的树,DFS一遍后得到每个点的DFS前序历遍顺序值dfsid[] ,和以改点为根的子树的总结点数num[]。(比如第一组样例dfsid[]={0,1,6,8,2,3,7,9,4,5} num[]={10,5,2,2,1,3,1,1,1,1});那么要判断a是否为b的祖先,只要满足dfsid[a]#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;typedef long long ll;t
阅读全文
摘要:首先找到全部双连通分量,然后对于某一个结点数大于2的连通分量,可以把全部的边改成单向的,按DFS的顺序。结点数为2的也就是一条为桥的边,必须保持双向。//#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;typedef long long ll;typed
阅读全文
摘要:找出强连通分量,缩点后统计入度为0的结点数。//#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;typedef long long ll;typedef unsigned long long ull;typedef pair pii;#define pb
阅读全文
摘要:每个连通块分别取min{白色,黑色}//#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;typedef long long ll;typedef unsigned long long ull;typedef pair pii;#define pb(a)
阅读全文
摘要:训练指南上的翻译错了,只有一对新娘新郎,其他是夫妻。//#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;typedef long long ll;typedef unsigned long long ull;typedef pair pii;#defin
阅读全文
摘要://#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;typedef long long ll;typedef unsigned long long ull;typedef pair pii;#define pb(a) push(a)#define INF
阅读全文
摘要://#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;typedef long long ll;typedef unsigned long long ull;typedef pair pii;#define pb(a) push(a)#define INF
阅读全文
摘要://#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;typedef long long ll;typedef unsigned long long ull;typedef pair pii;#define pb(a) push(a)#define INF
阅读全文
摘要://#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;typedef long long ll;typedef unsigned long long ull;typedef pair pii;#define pb(a) push(a)#define INF
阅读全文
摘要:找强连通分量,缩点,DP//#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;typedef long long ll;typedef unsigned long long ull;typedef pair pii;#define pb(a) push(a
阅读全文
摘要://#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;typedef long long ll;typedef unsigned long long ull;typedef pair pii;#define pb(a) push(a)#define INF
阅读全文
摘要:双连通分量://#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;typedef long long ll;typedef unsigned long long ull;typedef pair pii;#define pb(a) push(a)#defi
阅读全文
摘要://#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;typedef long long ll;typedef unsigned long long ull;typedef pair pii;#define pb(a) push(a)#define INF
阅读全文
摘要://#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;typedef long long ll;typedef unsigned long long ull;typedef pair pii;#define pb(a) push(a)#define INF
阅读全文
摘要:题意抽象出数学模型就是说“最少需要多少个区间能完全覆盖整个区间[1,n]”。一开始没看到“subsequence of the given sequence” ,直接排序,然后二分查找,居然1A。。充满了奇迹。AC后百度题解发现自己看错题也能AC,相当自豪!dp[i]表示覆盖[1,i]最少需要的区间数。那么对于某段区间[a,b],dp[b]=min(dp[a....b-1])+1;更新只需更新一点,不用一段。还有几个细节//#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include#incl
阅读全文
摘要://#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;typedef long long ll;typedef unsigned long long ull;typedef pair pii;#define pb(a) push(a)#define INF
阅读全文