摘要: 一,二分图匹配问题1.概念最大匹配:图中包含边数最多的匹配称为图的最大匹配。完美匹配:所有点都在匹配边上。最小顶点覆盖:用最少的点让每条边都至少和一个点关联。可以证明:最小覆盖需要的点集 = 最大匹配数最小路径覆盖:用最少的不相交的覆盖有向无环图G的所有结点。解决此类问题可以建立一个二分图模型。把所有顶点i拆成两个:X结点集中的i和Y结点集中的i',如果有边i->j,则在二分图中引入边i->j',设二分图最大匹配为m,则结果就是n-m。最大独立集问题:在N个点的图中选出m个点,使这m个点两两之间没有边.求m最大值.最大独立集点数 = N - 最小顶点覆盖(最大匹配数 阅读全文
posted @ 2013-11-25 13:26 匡时@下一站.info 阅读(432) 评论(0) 推荐(0) 编辑
摘要: 一,关于PV操作p操作:当一个进程对对信号量mutex执行p操作时,执行两个动作:mutex.valu–; //申请一个资源if (mutex.value=0) //如果有进程在等待使用本进程 wakeup(); //从该信号量的等待队列中唤醒一个进程当信号量mutex.value小于0时,其绝对值表示系统中因请求该类资源而被阻塞的进程数目.mutex.value大于0时表示可用的临界资源数。PV操作实现的功能:实现进程之间的互斥,实现进程之间的同步区别:互斥是为了保证临界区一次只能由一个进程使用;而同步是为了实现进程通信,即传递资源当前的态是否适合一个进程使用。实例:1. 互斥:进出教... 阅读全文
posted @ 2013-11-18 20:39 匡时@下一站.info 阅读(502) 评论(0) 推荐(0) 编辑
摘要: 一,凸包二维凸包:可用极角排序后每次倍增一个点看是否在栈顶两个点内侧,在内侧就加入栈,否则弹出一个。优化是在省去了计算极角的计算量,采用xy排序,从x最小倍增一遍求上边界,再从x最大反过来求下边界。二维凸包构造想法比较简单。凸多边形有一些有趣的性质设边数为n则内角和 =(n-2)×180°外角和 = 360°对角线的条数=C(n,2)-n=n(n-3)/2欧拉公式 凸多边形有n个点,m条边,r个面,则 n - m + r = 21.POJ1113 注意精度,这里有个公式城堡围墙长度最小值 = 城堡顶点坐标构成的散点集的凸包总边长 + 半径为L的圆周长#includ 阅读全文
posted @ 2013-11-14 17:38 匡时@下一站.info 阅读(275) 评论(0) 推荐(0) 编辑
摘要: 1.POJ 3635使用dijkstra堆优化思想,状态为二维的,每个点的油箱里的油,求每个状态的最小花费,每次从堆中弹出的状态就确定了这种状态的最小花费。对于每个状态,两种拓展方式,加一单位油,和直接向下开。#include #include #include using namespace std;#define MAXN 300050#define INF 0x3fffffffint tot;int head[MAXN], vis[MAXN][102];int dis[MAXN][102];int T, n, m;struct Edge { int to, nxt; int ... 阅读全文
posted @ 2013-11-12 16:47 匡时@下一站.info 阅读(247) 评论(0) 推荐(0) 编辑
摘要: 一,树状数组很简单的一种数据结构,用数字二进制的规律 lowbit = x&(x^(x-1))求出数字二进制末尾0的个数为2的幂次的值,这个数就管这么多个数,巧妙的用一个数代表一个区间的和解决单值修改&区间查询,和区间修改&单值查询问题很赞分为一维和二维,多维HDU 2430 区间最值查询#include using namespace std;#define MAXN 50003int C[2][MAXN], num[MAXN];int Lowbit[MAXN];int nCount;void Init() { for (int i = 1; i 0) { nMin 阅读全文
posted @ 2013-11-06 18:27 匡时@下一站.info 阅读(410) 评论(0) 推荐(0) 编辑
摘要: 先总结一下矩阵运算的模版程序求逆的方法目前不懂,求路过的大神解释。/* 这部分请忽略矩阵相乘有分治来优化的方法,Strassen算法,矩阵可以填0的方法计算令它成为2^n * 2^n,贴一下分治的那部分void Strassen(int n, T A[][N], T B[][N], T C[][N]) { T A11[N][N], A12[N][N], A21[N][N], A22[N][N]; T B11[N][N], B12[N][N], B21[N][N], B22[N][N]; T C11[N][N], C12[N][N], C21[N][N], C22[N][N];... 阅读全文
posted @ 2013-11-05 21:34 匡时@下一站.info 阅读(2860) 评论(0) 推荐(0) 编辑
摘要: 1.HDU 2208给小朋友分组,两两小朋友都喜欢对方才能分一组(因此既不是并查集,也不是强连通),数据多小啊,搜索先来一发。更好的思路是root[i]=J 表示i属于j组,找到每个root[i]==i的与新元素判断是否都在集合中,是就加入或不加入,不是就新产生一组。我还是比较喜欢用STL#include #include using namespace std;int G[13][13];int n, m;bool flag;vector part[22];void dfs(int num, int team) { if (flag) return; if (tea... 阅读全文
posted @ 2013-11-05 15:23 匡时@下一站.info 阅读(213) 评论(0) 推荐(0) 编辑
摘要: 一,经典搜索(深搜和广搜)与剪枝int a[62];bool v[62];int n;bool bingo=0;bool cmp(int a,int b){return a>b?1:0;}bool dfs(int begin,int left,int now,int max){ if(left==now) return 1; for(int i=begin;inow) continue; v[i]=1; if(a[i]==now &&dfs(0,left-a[i],max,max)) return 1; else if(dfs(begin+1,... 阅读全文
posted @ 2013-11-03 23:43 匡时@下一站.info 阅读(344) 评论(0) 推荐(0) 编辑
摘要: 大二上《数据结构》《操作系统》作业和实验代码随着大二上学期结束,本博文完结停止更新。完整操作系统部分代码见博文《理解操作系统相关知识》1.数据结构实验一#include #include #include #include using namespace std;#define MAXN 100004typedef unsigned int uint;const int mut1 = 127;const int mut2 = 131;const int MOD = 2000007;const unsigned int INF = 0x3fffffff;struct hash_map { ... 阅读全文
posted @ 2013-11-03 23:22 匡时@下一站.info 阅读(439) 评论(0) 推荐(0) 编辑
摘要: 一,大数下面为我的高精度整数模板#include #include #include #include using namespace std;#define MAXN 500struct BigNum { int num[MAXN]; int len;};//高精度比较 a > b return 1, a == b return 0; a b.len) ? 1 : -1; for (i = a.len - 1; i >= 0; i--) if (a.num[i] != b.num[i]) return (a.num[i] > b.num... 阅读全文
posted @ 2013-11-03 22:49 匡时@下一站.info 阅读(301) 评论(0) 推荐(0) 编辑
摘要: 一,KMP模式匹配//模式匹配,kmp算法,复杂度O(m+n)//返回匹配位置,-1表示匹配失败,传入匹配串和模式串和长度#define MAXN 10000int next[MAXN];int pat_match(int ls,char* str,int lp,char* pat){ nex... 阅读全文
posted @ 2013-11-03 22:39 匡时@下一站.info 阅读(426) 评论(0) 推荐(0) 编辑
摘要: 树的一些性质二叉树:第i层至多有2^(i-1)个节点,至少有1个;深度为k的二叉树至多有2^k-1个节点,至少有k个节点。节点总数=边数(总度数)+1=二度点*2+一度点+1=二度点+一度点+叶子节点 推出 二度点+1=叶子节点个数完全二叉树:n个结点的叶子节点个数有 n/2 向上取整个。深度为logn/log2+1。顺序存储时若1存根节点,则2n为左结点,2n+1为右结点。二叉链表:n个结点共有2n个指针域,其中n-1个表示结构,n+1个空指针。利用起来这些空指针为线索二叉树。先序/中序/后序线索二叉树:LTag=0, lchild域指向左孩子;LTag=1, lchild域指向其前驱RTa 阅读全文
posted @ 2013-11-03 20:26 匡时@下一站.info 阅读(681) 评论(0) 推荐(0) 编辑