摘要:
View Code 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 using namespace std; 5 6 struct node 7 { 8 int v; 9 node *next;10 }point[1000001];11 node *table[1000000];12 13 int a[101];14 int k;15 16 int hash(int x)17 {18 return (x%1000000);19 }20 21 void add()22 {23 int 阅读全文
摘要:
View Code 1 /* 2 问题: 3 给你一些有向边 组成一个有向图 4 问这个图是不是一颗树 5 思路: 6 组成树的条件: 7 1.图按无向图计算 是连通的(并查集判断) 8 2.有且仅有一个顶点的入度为零(根节点) 9 3.除根节点外的其余顶点入度必须都为1 10 */ 11 #include<iostream> 12 #include<cstring> 13 using namespace std; 14 15 bool flag[10010];//标记 16 int rd[10010];//记录每个点的入度 17 18 int rank[1001... 阅读全文
摘要:
树状数组:(插点法插线法)最常见的一种用途是求一个数列的前N项和比如说数组a[] 吧:把他转化一下存入树状数组c[] 中如:c[1]=a[1]c[2]=a[1]+a[2]c[3]=a[3]c[4]=a[1]+a[2]+a[3]+a[4]......................................................c[16]=a[1]+a[2]+....................+a[16]也即c[n]管理着2^k个数 (k代表二进制n最后连续有多少个0) c[n]为这个连续2^k个数的最后一个因此有 c[n]=a[n-2^k+1]+.....+a[n];则: 阅读全文
摘要:
View Code 1 /* 2 问题: 3 在一个数组中 不断在某些区间中增加值 4 询问 某一节点 的值 5 思路: 6 树状数组(插线法): 7 */ 8 #include<iostream> 9 #include<cstdio>10 using namespace std;11 12 int lt[1000001];13 int T,N;14 15 int lowbit(int x)16 {17 return x&(-x);18 }19 void add(int s,int v)20 {21 while(s>0)22 {23 lt[s]+=v;24 阅读全文
摘要:
View Code 1 /* 2 trie树: 3 利用trie树 查找单词 的简单程序 4 */ 5 //法一:自己的方法 6 #include<iostream> 7 #include<cstdio> 8 using namespace std; 9 10 struct trie11 {12 bool is;//标记是否是个单词 13 trie *next[11];// 分别代表14 void (*init)(trie *);// 为了初始化is=0,next=NULL 15 }node[100000];16 17 trie *root;18 bool f;19 . 阅读全文
摘要:
文章作者:yx_th000 文章来源:Cherish_yimi (http://www.cnblogs.com/cherish_yimi/) 转载请注明,谢谢合作。关键词:trie trie树 数据结构前几天学习了并查集和trie树,这里总结一下trie。 本文讨论一棵最简单的trie树,基于英文26个字母组成的字符串,讨论插入字符串、判断前缀是否存在、查找字符串等基本操作;至于trie树的删除单个节点实在是少见,故在此不做详解。l Trie原理Trie的核心思想是空间换时间。利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的。l Trie性质好多人说trie的根节点不包含任何字符信 阅读全文
摘要:
View Code 1 /* 2 问题:给出一些两端染有颜色木棒, 3 把这些木棒以相同的颜色对接 4 是否能形成一条直线 5 思路: 6 1.输入 以文件结束 7 2.利用字符串hash ,在hash表中存放的 8 是这是第几个端点,也能表明在这位置的端点 9 是否出现过10 3.并查集判断连通性11 4.看是否存在欧拉路 12 13 呵呵,没想到数组开这么大,用了hash记录点 竟然一次过了,欣喜,加油!!! 14 */15 #include<iostream>16 #include<cstdio>1... 阅读全文
摘要:
View Code 1 /*参考 DP 中的 15题*/ 2 #include<iostream> 3 #include<cstring> 4 #define min(x,y) x<y?x:y 5 using namespace std; 6 int num[110][110]; 7 char ch[110]; 8 int comp(int i,int j) 9 {10 if(ch[i]=='('&&ch[j]==')')return 1;11 if(ch[i]=='['&&ch[j] 阅读全文
摘要:
View Code 1 /* 2 问题:输入一组括号 看需要最少添加几个括号才能使 3 这组括号匹配 4 思路:DP 5 dp[j][i]表示从第j个字符到第i个字符这个括号串最少需要添加几个能使 6 这个子串匹配 7 则有 8 1.如果从j 到 i-1没有能与i匹配的则有 9 dp[j][i]=dp[j][i-1]+1;10 2.若从j 到i-1有与i匹配的(假如为第k个)则有11 dp[j][i]=dp[j][k-1]+dp[k+1][i-1];(可能有多个与i都匹配 取最小的) 12 */ 13 #include<ios... 阅读全文
摘要:
1.最小生成树---普里姆 或 kruskal 算法2.一笔画问题(一个图走过所有边且不重复)---欧拉路 或 欧拉回路3.图的连通性问题---并查集 阅读全文