现在位置: 首页 > 算法 > 文章
2018年12月23日 算法 ⁄ 共 1229字 评论关闭
点击打开链接 无向图求欧拉回路: 1、图连通 2、所有顶点的度数位偶数 #include <cstdio> #include <cstring> #include <stack> #include <queue> #include <algorithm> using namespace std; const int mt = 2000; const int ms = 50; bool vis[mt+5]; int g[ms][mt+5]; int deg[ms+5]; int f[ms+5]; stack<int> s; int street, startv; int findset(int x){ return f[x]==x?f...
阅读全文
2018年12月23日 算法 ⁄ 共 1934字 评论关闭
点击打开链接 无向图点双联通,二分图判定 <span style="font-size:18px;">#include <cstdio> #include <stack> #include <vector> #include <algorithm> #include <cstring> using namespace std; struct Edge{ int u, v; }; const int maxn = 1005; int pre[maxn], iscut[maxn], bccno[maxn],dfs_clock, bcc_cnt; vector<int> G[maxn], bcc[maxn]; stack<Edge> S;...
阅读全文
2018年12月23日 算法 ⁄ 共 1781字 评论关闭
http://poj.org/problem?id=3468  整段更新,整段查询 PushUp(int rt) 是把当前结点的信息更新到父结点 PushDown(int rt) 是把当前结点的信息更新到儿子结点 延迟标记: 简单来说就是每次更新的时候不要更新到底,用延迟标记 使得更新延迟到下次需要更新or询问到的时候 /* * 整段更新,整段查询 * PushUp(int rt) 是把当前结点的信息更新到父结点 * PushDown(int rt) 是把当前结点的信息更新到儿子结点 * 延迟标记: ...
阅读全文
题目链接:点击打开链接 题意:有两种操作,合并集合,查询第K大集合的元素个数。(总操作次数为2*10^5) 解法: 1、Treap 2、树状数组      |-二分找第K大数      |-二进制思想,逼近第K大数 3、线段树 4、。。。 Treap模板(静态数组) #include <math.h> #include <time.h> #include <stdio.h> #include <limits.h> #include <stdlib.h> const int maxNode = 500000 + 100; const int inf =...
阅读全文
2018年12月23日 算法 ⁄ 共 1203字 评论关闭
提交地址:点击打开链接 题意:  N(N<=10^5)只猴子,初始每只猴子为自己猴群的猴王,每只猴子有一个初始的力量值。这些猴子会有M次会面。每次两只猴子x,y会面,若x,y属于同一个猴群输出-1,否则将x,y所在猴群的猴王的力量值减半,然后合并这两个猴群。新猴群中力量值最高的为猴王。输出新猴王的力量值。 分析:涉及集合的查询,合并,取最值。 利用并查集和左偏树即可解决。 #include <cstdio> #include <cstri...
阅读全文
2018年12月23日 算法 ⁄ 共 2909字 评论关闭
题意: 给定一些木棒,木棒两端都涂上颜色,求是否能将所有木棒首尾相接,连成一条直线,要求不同木棒相接的一边必须是相同颜色的。 无向欧拉图:不存在或只存在两个奇度顶点 用并查集判断图的连通性 //判断是否只有一个根结点 用Trie或者hash给每种颜色编号 静态数组Trie #include<cstdio> #include<cstring> #include<cmath> #include<iostream> #include<vector> #include<algorithm&...
阅读全文
2018年12月23日 算法 ⁄ 共 1403字 评论关闭
sum[i][j] 表示从第1到第i头cow属性j的出现次数 所以题目要求等价为: 求满足 sum[i][0]-sum[j][0]=sum[i][1]-sum[j][1]=.....=sum[i][k-1]-sum[j][k-1] (j<i) 中最大的i-j 将上式变换可得到 sum[i][1]-sum[i][0] = sum[j][1]-sum[j][0] sum[i][2]-sum[i][0] = sum[j][2]-sum[j][0] ...... sum[i][k-1]-sum[i][0] = sum[j][k-1]-sum[j][0] 令C[i][y]=sum[i][y]-sum[i][0] (0<y<k) 初始条件C[0][0~k-1]=0 所以只需求...
阅读全文
2018年12月23日 算法 ⁄ 共 826字 评论关闭
a1x13+ a2x23+ a3x33+ a4x43+ a5x53=0  所有数的范围[-50,50] 给出 a1, a2, a3, a4, a5的值,x1, x2, x3, x4, x5为变量,求这个方程有多少组解。 可以先三重循环枚举x1,x2,x3计算前面三项的值sum1,  count[sum1]++; 然后二重循环枚举x4,x5计算后面二项的值sum2,   answer += count[-sum2]; 这里要注意,sum1, sum2的值可以为负数,所以要加上一个合适的值,同时也要考虑count[]数组的大小。 当然也可以用STL_map 代替count...
阅读全文
2018年12月23日 算法 ⁄ 共 1057字 评论关闭
poj 2002 Squares 给出n个点,问能组成多少个正方形? 题解: 先把每个点hash 然后枚举两点(即枚举正方形的一条边),然后通过三角形全等,可以推出正方形的另外两点,在hash表里查找这两点看是存在,存在则 Cnt +1。 最后 answer = Cnt/4 //因为同一正方形都统计了4次。 #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int MAXN = 1005; const int MOD = 100...
阅读全文
2018年12月23日 算法 ⁄ 共 1054字 评论关闭
http://poj.org/problem?id=2431 题意:         你需要驾驶一辆卡车行驶L单位距离。最开始时,卡车上有P单位的汽油。卡车每开1单位距离需要消耗1单位的汽油。如果在途中车上的汽油耗尽,卡车就无法继续前行,因而无法到达终点。在途中一共有N个加油站。第i个加油站在距离终点Ai单位距离的地方,最多可以给卡车加Bi单位汽油。假设卡车的燃料箱的容量是无限大的,无论加多少油都没有问题。那么请问卡车是否能到达终点?如果可...
阅读全文