- 博客(27)
- 资源 (3)
- 收藏
- 关注
原创 foj 1844 题解题报告 + 源代码
题意: 题目是说, 2008年汶川大地震中,可能大约有N(N 解题方法: 这题的思路还是很容易的,就是把每个点拆成2各点a, a, 如果是原图中的边,那么,就建这样的边,, , ,其中 和的容量是inf,再在原图中添加一个汇点t,把 m个没有的被摧毁的点(不包括1)的i,与t建一条边,容量是inf,然后对于原图中的每个点建一条边,如果a是这m个点的
2010-03-25 10:32:00
398
原创 排序算法 kmp算法 双向链表的插入与删除
题意: 给你n个数,现在要你调整k个数的位置, 使得具有最少的连续段数; 比如 n = 5 , k = 1, 27 28 29 27 30 没调整前 连续段数是5 ,调整为 27 27 28 29 30 后连续段数是4 一开始看了一个错误的标程,害我挂了好久!source code:#include /!这个题目的dp好难想到啊, 终于看懂了
2010-01-19 10:48:00
794
原创 2009 ACM/ICPC 武汉赛区G题解题报告(状态压缩 dp )
题意: 给你n个数,现在要你调整k个数的位置, 使得具有最少的连续段数; 比如 n = 5 , k = 1, 27 28 29 27 30 没调整前 连续段数是5 ,调整为 27 27 28 29 30 后连续段数是4 一开始看了一个错误的标程,害我挂了好久!source code:#include /!这个题目的dp好难想到啊, 终于看懂了
2009-12-29 17:25:00
3081
原创 博弈题 poj 1143
#include #include #include using namespace std;int const max_state = 1int const maxn = 20;int maxD, record[max_state], exp[maxn+1];bool res[maxn+1];int num, state;int dfs(int curstate, int level){
2009-12-26 20:26:00
595
原创 求矩形并的周长 poj 1177 picture
#include #include #include using namespace std;struct node{ int st, ed, m, lbd, rbd; int sequence_line, count;} ST[40005];void build(int st, int ed, int v){ ST[v].st =
2009-12-14 14:17:00
609
原创 优美的爱情
Fleeting time does not blur my memory of you. Can it really be 4 yearssince I first saw you? I still remember, vividly, on the beautifulZhuhai Campus, 4 years ago, from the moment I saw you smile,
2009-12-13 10:47:00
505
原创 无向图的最小割算法
求无向图的最小割 最小割集◎Stoer-Wagner算法一个无向连通网络,去掉一个边集可以使其变成两个连通分量则这个边集就是割集;最小割集当然就权和最小的割集。可以用最小切割最大流定理:1.min=MAXINT,确定一个源点2.枚举汇点3.计算最大流,并确定当前源汇的最小割集,若比min小更新min4.转到2直到枚举完毕5.min即为所求输出min
2009-11-22 11:37:00
7779
原创 线段树
线段树 从简单说起,线段树其实可以理解成一种特殊的二叉树。但是这种二叉树较为平衡,和静态二叉树一样,都是提前已经建立好的树形结构。针对性强,所以效率要高。这里又想到了一句题外话:动态和静态的差别。动态结构较为灵活,但是速度较慢;静态结构节省内存,速度较快。接着回到线段树上来,线段树是建立在线段的基础上,每个结点都代表了一条线段[
2009-11-21 10:26:00
557
原创 树状数组
树状数组是一个查询和修改复杂度都为log(n)的数据结构,假设数组a[1..n], 那么查询a[1]+...+a[n]的时间是log级别的,而且是一个在线的数据结构, 支持随时修改某个元素的值,复杂度也为log级别。 来观察这个图: 令这棵树的结点编号为C1,C2...Cn。令每个结点的值为这棵树的值的总和,那么容易发现: C1 = A1 C2 =
2009-11-21 10:19:00
459
原创 差分约束系统
差分约束若s[a]-s[b]>=k 建一条b到a的长度为k的边若 s[a]-s[b]建一条b到a的长度为-k的边>= 是求最小值的最长路;是求最大值的最短路;注意到最短路算法的松弛操作:if (d[j] > d[i] + w[i][j]) d[j] = d[i] + w[i][j]。这其中的三角形不等式:d[j] ≤ d[i] + w[i][j]简单变形就成了d[i
2009-11-21 10:18:00
306
原创 容量有上下界的最大流 poj 2396 pku
#include #include#includeusing namespace std;int ulim[250][250],dlim[250][250],f[250][250],h[250],vh[250],din[250],dout[250];int sour,sink,tsour,tsink,m,n,testcase,tot,flow,augc;bool flag;int min(int
2009-11-14 16:47:00
1554
原创 SAP 算法 求最大流 poj 3189 pku
#includeusing namespace std;int const MAXN=1100;int const MAXM=50010;int const oo=1234567890;typedef struct { int u; int v; int cap; int next; }edge_t;edge_t e[MAXM];int first[MAXN];int dist[MAXN
2009-11-14 16:44:00
690
原创 中国剩余定理
问题简单来说就是 a = ai (mod ni) 求未知数a, 以下小结略去证明, 只是对定理作了必要的解释, 要了解相关定理,可查阅数论资料.中国余数定理: 设 n=n1*n2...nk, 其中因子两两互质.有: a-----(a1,a2,...,ak), 其中ai = a mod ni, 则 a和(a1,a2,...,ak)关系是一一对应的.就是说可以由 a求出(a1,a
2009-11-14 16:41:00
336
原创 差分约束系统
差分约束若s[a]-s[b]>=k 建一条b到a的长度为k的边若 s[a]-s[b]建一条b到a的长度为-k的边>= 是求最小值的最长路;是求最大值的最短路;注意到最短路算法的松弛操作:if (d[j] > d[i] + w[i][j]) d[j] = d[i] + w[i][j]。这其中的三角形不等式:d[j] ≤ d[i] + w[i][j]简单变形就成了d[i]
2009-11-14 16:39:00
289
原创 poj 2100
#include #include #include #include using namespace std;#define MAX_SQAURE_COUNT 66943struct Result { Result (int b, int l) : begin(b), length(l){} int begin; int length;};class ResultCmper {public:
2009-11-14 16:38:00
567
原创 poj 3163 Cow Relays源代码
#include using namespace std;int const INF=1000000001;int const MAXN=310;int N,S,T,E,tot;int map[MAXN][MAXN],ans[MAXN][MAXN],dis[MAXN][MAXN],tmp[MAXN][MAXN];int test[1010],flag[1010];
2009-10-31 09:54:00
523
原创 poj 1103 maze源代码
#include using namespace std;int const MAXN=76;struct node{ int prex,prey,preid;};node pre[MAXN][MAXN][2];char map[MAXN][MAXN];int visited[MAXN][MAXN][2];int w,h;int length;int path[MAXN][MAXN]
2009-10-19 21:26:00
992
原创 poj 2100 gravedyard design 还是wa了,那位大牛看了,帮我改一下我的邮箱是972997012@qq.com
#include #includeusing namespace std;long long n;struct pale{ long long x,k;};pale res[100000];long long sum(long long x,long long k){ return (k+1)*x*x+k*(k+1)*x+k*(k+1)*(2*k+1)/6;}long long gcd
2009-10-12 20:51:00
867
转载 poj 3133 Manhattan Wiring
#include using namespace std;#define out(x) (cout typedef long long int64;const int maxint = 0x7FFFFFFF;const int64 maxint64 = 0x7FFFFFFFFFFFFFFFLL;template void show(T a, int n) { for (int i = 0;
2009-10-07 15:04:00
830
原创 poj How I Mathematician Wonder What You Are! 求多边形的核
#include #includeusing namespace std;const double EPS=1e-8;const int MAXN=100;struct point{ double x,y;};struct cp{ int n; point p[MAXN];};//求直线a1*x+b1*y+c1=0与a2*x+b2*y+c2=0的交点point intersect
2009-10-07 15:01:00
462
原创 图的广度优先搜索算法实现
#include using namespace std;const int N=11;struct node{ int front; int dis;}front_point[N];//记录每个点到起点的距离和每个点的前驱int graph[N][N];//用邻接矩阵来表示图bool visited[N];//记录点是否被标记void BFS(int x,int k)//广搜{ int
2009-09-17 21:50:00
582
原创 最小生成树的prim算法实现
#include using namespace std;const int N=6;const int data_max=10000000;struct edge{ int point1; int point2; bool vis; int length;//边的长度}graph_edge[N*(N-1)/2];//用来存放图的边int edge_num;//边的总数bool
2009-09-17 16:56:00
318
原创 dijkstra算法实现
#include using namespace std;const int N=10;const int data_max=100000000;int graph[N][N];int distances[N];int front[N];void dijkstra(int graph[N][N],int k){ bool visited[N]; int i; for(i=0;i
2009-09-17 11:13:00
241
原创 欧拉回路算法实现
#include using namespace std;const int N=9;int graph[N][N];//图的邻接矩阵struct stack{ int top; int node[N*N];}path;//Euler 回路的路径void DFS(int x)//深搜{ path.top++; path.node[path.top]=x; int i; fo
2009-09-17 11:00:00
1486
原创 64位以内Rabin-Miller强伪素数测试
/*Rabin-Miller 这是个很容易且广泛使用的简单算法,它基于Gary Miller的部分象法,有Michael Rabin发展。事实上,这是在NIST的DSS建议中推荐的算法的一个简化版。 首先选择一个代测的随机数p,计算b,b是2整除p-1的次数。然后计算m,使得n=1+(2^b)m。 (1) 选择一个小于p的随机数a。 (2) 设j=0且z=a^m mod p (3) 如果z=1或z
2009-09-10 18:42:00
1718
原创 Pollard "p-1"方法 分解合数的因素;
/* Pollard "p-1"方法 (1).选取一个可被许多素数的幂次整除的正整数k;例如k=LCM(1,2,……B) (2)指数。计算ak=a^k mod n; (3)计算最大公因子,计算d=gcd(ak-1,n) (4)找到因子?若1 (5)重新开始?若d不是n 的平凡因子,且还想再进行一次实验的话则返回(2) 重新选择a和k,再进行上述步骤,否则执行步骤(6)(6)退出。 *
2009-09-10 18:33:00
2389
原创 pku acm 2021题解题报告
该题是的题意:输入一组数据,包括某个人的人名和他父亲的名字,以及他出生时他父亲的年龄,这些人都是Ted的后代,现在要你整理这些数据,按年龄大小输出这个家族的成员,如果某些成员年龄相同,按照字母的顺序输出;解题思路:1.首先构造两个结构体,一个是people{ int bornage;char father[100];char child[100]; }其中father用来存放他父
2009-05-01 19:20:00
414
hdu 3333 turing tree 解题报告
2010-03-10
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人