摘要:
邻接矩阵+SPFAbool spfa(){ int u,v; memset(pre,0,sizeof pre); memset(dist,0x7f,sizeof dist); dist[S]=0; vis[S]=1; q.push(S); ... 阅读全文
摘要:
int dfs(int u,int augu){ int augv=0,v,delta,mind= n-1; if(u==T) return augu; for(v=S;v0){ if(dist[u]==dist[v]+1){ ... 阅读全文
摘要:
1.最优性、可行性剪枝 2.估计搜索空间大小 3.选择合适搜索对象 4.选择搜索方向 5.控制搜索深度I.D,DFS,IDA* 6启发式(估值函数) 7.双向搜索:DFS:中间相遇(meet in the middle) BFS:双向BFS 阅读全文
摘要:
题目 分析:在对角线上全是1,逆向思考这个问题,将对角线上的1回到他们原来的地方后,发现这些1中没有任何两个在同一行或同一列,也就是这个图是一个置换矩形。 将每一行,每一列编号,分别作为x部和y部,将1所在的行列连边,求最大匹配。 至... 阅读全文
摘要:
题目 本题实质是求第k短的路径; SPFA+A* 进行启发式搜索直至访问终点k次, 估值函数:当前已经走的距离+当前点到终点的最短路 注意:当s==t时,要特判#include#include#include#includeusing namespace std;#define M... 阅读全文
摘要:
bool dfs(int u){ for(node *p=adj[u];p;p=p->next){ if(vis[p->v]) continue; vis[p->v]=1; if(!c[p->v]||dfs(c[... 阅读全文
摘要:
题目分析:二分图匹配,和ZOJ1052差不多,但是草地在计算连通块是当做空地,在连边是如果交点是草地则不连边。代码:#include#include#define MAXN 50int n,a[MAXN+10][MAXN+10],cnt,cnt1,c[MAXN*MAXN*2+10]... 阅读全文
摘要:
题目 二分图匹配,建图方式巧妙,横向连通块(在一行,中间没有障碍物)、纵向连通块分别为x,y部,相交的连边,求最大匹配。#include#include#define MAXN 4int n,a[MAXN+10][MAXN+10],cnt,cnt1,c[MAXN*MAXN*2+10... 阅读全文
摘要:
题目描述:点击此处 解题思路: 构造最小生成树,并计算苗条度,然后不断删最短边,用kruskal构造最小生成树,计算苗条度,直至图不再连通,输出苗条度。 若一开始就不是一棵树,则输出-1;因为kruskal是贪心的算法,所以确定了最小边之后,最大边也随之确定,且最大边最小。实现代码... 阅读全文
摘要:
题目 分析:显然是搜索,bfs比较慢,那就用A*吧,但是并不能直接用A*求最短路,因为在你讲迷宫拉伸了之后,你一开始找的最短路并不一定最短(我是这么觉得,自己想想),所以就二分拉伸的比例,然后用A*进行Check。代码#include#include#include#include... 阅读全文
摘要:
题目 分析:这道题看到的第一反应应该就是BFS或者DFS,裸的DFS、BFS显然会TLE,所以我就想用A*,不过好像并不好写启发函数。 枚举步数不行,就枚举边吧。因为允许有两次转折,所以最多有三条边枚举中间的一条边,然后进行check,这道题只用了两个for循环就A... 阅读全文
摘要:
题目 分析:设L(n)为LCM(1,2,3……n),则有若n+1不是 质数的完全平方,则可将质因数分解成p1^a1*p2^a2*……pn^an,对于每个pi^ai,显然<n,且两两互质,所以p1^a1*p2^a2*……pn^an|L(n),所以n+1|L(n),L(n +1)=L(... 阅读全文
摘要:
题目 分析:枚举最大数,然后找出它所有因数p1…….pk, 从中任意选取一些数,这些数的LCM|这个数且,这些数的最大LCM就是枚举的这个数,且若pi#include#includeusing namespace std;#define MAXN 100000#define MOD... 阅读全文
摘要:
题目 从各位开始按照字母出现的顺序枚举每个字母代表的值; 注意:要倒序枚举,这样比较快,虽然我也不知道为什么。 剪枝:1.搜索时每个数值只能由一个字母代表 2.搜索中如果发现有矛盾就回溯#include#define MAXN 26#include#includei... 阅读全文
摘要:
题目描述:点击此处 解题思路: 平行四边形相对顶点的横坐标、纵坐标之和分别相等。 将所有机场的坐标都算出来之后,再根据题目描述连边,从出发地的四个机场或到达地的四个机场分别做单源点最短路。实现代码:#include #include#include #include #includ... 阅读全文
摘要:
题目描述:点击此处 解题思路: 在加边的同时对边进行插入排序,当边的数量≥n-1时,进行kruskal,此时每次kruscal的复杂度为O(m),算法的时间复杂度为O(m^2)实现代码#include#include#define INF 0x7f7f7f7f#define MAX... 阅读全文
摘要:
题目 DFS(meet in the middle) 通过此条件剪枝,由于本题数据较大,可通过HASH表存储方案数。#include#include#include#includeusing namespace std;#define MAXN 6#define MAXH 499... 阅读全文