摘要:
根据关系建一个图,然后就是后面的插座的传递闭包,一个floyd构边。代码如下:#include <cstdlib>#include <cstdio>#include <cstring>#include <algorithm>#include <iostream>#include <map>#include <string>#define INF 0x3fffffff#define CN(x) (255+(x))#define MN(x) (555+(x))#define MAXN 500using namesp 阅读全文
摘要:
每次计算出当前点与第一个点的距离即可。代码如下;#include<stdio.h>#include<stdlib.h>#include<string.h>#include<iostream>#include<vector>#include<string>#include<math.h>#include<map>#include<set>#include<algorithm>#define MAXN 100000using namespace std;int N, M, cur 阅读全文
摘要:
第二次来做这一题,由于题目中给定了一个等级限制M,所以可以通过枚举第一个点所在的位置求解.思路很清晰.for (int i = 0; i <= M; ++i) 这个i来表示第一个点的等级在M长度区间内的偏移量.然后再在区间内建边,floyd即可.代码如下:#include <cstdlib>#include <cstdio>#include <cstring>#include <algorithm>#include <iostream>#define INF 0x3f3f3f3fusing namespace std;int M 阅读全文
摘要:
这题是求一个圈中取出若干相邻的数,求其中的最大值,不能够同时取所有的数。本来想着要扩张出一个圈出来,再通过限定长度来转化为线段上的问题,但是这样明显就复杂很多了,有一个结论就是当这个区间在[1-N]之间的话,那么直接输出最大值,否则一定是sum - min[1-N],也就是说如果区间跨越了1,N两个点,那么[1-N]中就一定隐藏了最小子串和。很好理解,因为整个循环串就是由一个最大子串和一个最小子串组成的。线段树的节点中要存储较多的值:lmax -- 从左边开始至少取一个节点的最大值lmin -- 从左边开始至少取一个节点的最小值rmax -- 从右边开始至少取一个节点的最大值rmin -- 从 阅读全文
摘要:
依据题中所给定的关系构图,直接网络流。源点到食物,食物到人,人拆成两个点,流量为1,再从人到饮料。代码如下:#include <cstdio>#include <cstring>#include <cstdlib>#include <algorithm>#define INF 0x3fffffff#define F(x) (x)#define N(x) (205+(x))#define CPN(x) (410+(x))#define D(x) (615+(x))using namespace std;int n, f, d, head[1005] 阅读全文