跟上一道题差不多,拆分单词,这里是不断把后缀加进字典树,但要注意同一个字母的两个或两个以上相同前缀只能算一个,所以在插入时要多传入一个参数记录传入字符串所属单词的编号,如果某个节点上一次也是由这个单词产生的,则只记一次就好View Code #include<stdio.h>#include<string.h>#include<math.h>class trie{public: int num; int pre; trie *child[26]; trie() { num=0; pre=-1; memset(child,0... Read More
任务:输出所有可以由其他两个单词组成的单词如题目中的ahat有a和hat组成做法:建立好字典树后拆分单词,把单词分成两段,再在字典树中查找这两段单词是否存在,如果存在就输出,注意输出后要break掉,就这样。View Code #include<stdio.h>#include<string.h>#include<math.h>class trie{public: bool flag; trie *child[26]; trie() { flag=false; memset(child,0,sizeof(child)); }}root;... Read More
G++提交又超市了,囧c++就AC了开始没有判重,错了几遍最小生成树简dan题prim和克鲁斯卡尔View Code #include<stdio.h>#include<string.h>#include<algorithm>using namespace std;int n,m,k,p[505],ans;struct node{ int u,v,w;}pt[250000];int cmp(node a,node b){ return a.w<b.w;}int find(int x){return p[x]==x?x:p[x]=find(p[x]);} Read More
如果已经建好的公路就直接连一权值为0的边View Code #include<stdio.h>#include<string.h>#define inf 999999int flag[200];int D[200];int map[200][200];int n,i,j;int prime()//下标1开始 { int v,k; int ret=0,mi; for(i=1;i<=n;i++){ flag[i]=0; D[i]=inf; }D[1]=0;flag[1]=1;v=1; for(k=1;k<n;k++){ for... Read More
View Code int prime()//下标从1开始 { int i,v,k; int ret=0,mi; for(i=1;i<=n;i++){ flag[i]=0; D[i]=inf; }D[1]=0;flag[1]=1;v=1; for(k=1;k<n;k++){ for(i=1;i<=n;i++)if(!flag[i]){ if(map[v][i]<D[i]) D[i]=map[v][i]; } mi=inf; for... Read More