学习最小生成树已经有一段时间了 做一些比较简单的题还算得心应手..花了三天的时间做完了kuangbin的专题 写一个题解出来记录一下(虽然几乎都是模板题)

做完的感想:有很多地方都要注意 n == 1

注意double 的精度问题

poj 1251 模板题 大写字母减去'A'+1即是它的编号

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<map>
#include<math.h>
#include<queue>
using namespace std;
struct edge
{
int u,v,w;
};
edge a[30000];
int fa[50];
int cmp(edge a,edge b)
{
return a.w<b.w;
}
int find(int x)
{
if(fa[x]==x)
return x;
return fa[x]=find(fa[x]);
}
void un(int x,int y)
{
int fx=find(x);
int fy=find(y);
if(fx==fy)
return ;
fa[fx]=fy;
return ;
}
int n;
int tot;
int kru()
{
int cnt=0;
int res=0;
for(int i=0;i<tot;i++)
{
int u=a[i].u;
int v=a[i].v;
int w=a[i].w;
if(find(u)!=find(v))
{
un(u,v);
cnt++;
res+=w; }
if(cnt==n-1)
return res;
}
return -1;
}
int main(){
while(~scanf("%d",&n))
{
if(n==0)
break;
tot=0;
for(int i=1;i<=n;i++)fa[i]=i;
for(int i=1;i<=n-1;i++)
{
char u[20],v[20];
scanf("%s",u);
int ma;
scanf("%d",&ma);
int uu=u[0]-'A'+1;
for(int k=1;k<=ma;k++)
{
scanf("%s",v);
int w;
scanf("%d",&w);
int vv=v[0]-'A'+1;
a[tot].u=uu;
a[tot].v=vv;
a[tot++].w=w;
}
}
sort(a,a+tot,cmp);
int ans=kru();
printf("%d\n",ans);
}
}

poj 1287 极裸的kru算法

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<map>
#include<math.h>
using namespace std;
int n,m;
int ta[70][70];
int fa[70];
struct node
{
int u,v,w;
};
node a[2700];
int tot;
void init(){
for(int i=1;i<=n;i++)fa[i]=i;
}
int find(int x)
{
if(fa[x]==x)
return x;
else return fa[x]=find(fa[x]);
}
void un(int x,int y)
{
int fx=find(x);
int fy=find(y);
if(fx==fy)
return ;
fa[fx]=fy;
return ;
}
int cmp(node a,node b)
{
return a.w<b.w;
}
int kru()
{
int res=0;
int cnt=0;
init();
for(int i=0;i<tot;i++)
{
int u=a[i].u;
int v=a[i].v;
int w=a[i].w;
if(find(u)!=find(v))
{
un(u,v);
res+=w;
cnt++;
}
if(cnt==n-1)
return res;
}
}
int main(){
while(scanf("%d",&n)!=EOF)
{
if(n==0)
break;
scanf("%d",&m);
for(int i=1;i<=n;i++)
for(int k=1;k<=n;k++)
{
ta[i][k]=999999999;
if(i==k)
ta[i][k]=0;
}
for(int i=1;i<=m;i++)
{
int u,v,w;
scanf("%d%d%d",&u,&v,&w);
if(ta[u][v]>w)
ta[u][v]=ta[v][u]=w;
}
tot=0;
for(int i=1;i<=n;i++)
for(int k=i+1;k<=n;k++)
{
if(ta[i][k]!=999999999)
{
a[tot].u=i;
a[tot].v=k;
a[tot].w=ta[i][k];
tot++;
}
}
sort(a,a+tot,cmp);
int ans=kru();
printf("%d\n",ans);
}
}

poj 2031 给出空间站的三维坐标和它可允许的行走半径 问需要建造多长的太空走廊可以联通 kru加个判断

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<map>
#include<math.h>
using namespace std;
int n;
struct node
{
int u,v;
double w;
};
int fa[105];
int tot;
node a[10050];
struct point
{
double x,y,z;
double r;
};
point b[105];
void init()
{
for(int i=1;i<=n;i++)fa[i]=i;
}
double ji(double x1,double y1,double x2,double y2)
{
return ((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}
int find(int x)
{
if(fa[x]==x)
return x;
return fa[x]=find(fa[x]);
}
void un(int x,int y)
{
int fx=find(x);
int fy=find(y);
if(fx==fy)
return ;
fa[fx]=fy;
return ;
}
double kru()
{
double res=0.0;
int cnt=0;
init();
for(int i=0;i<tot;i++)
{
int u=a[i].u;
int v=a[i].v;
double w=a[i].w;
if(find(u)!=find(v))
{
res+=w;
cnt++;
un(u,v);
}
if(cnt==n-1)
return res;
}
return -1;
}
double cmp(node aa,node bb)
{
return aa.w<bb.w;
}
int main(){
while(~scanf("%d",&n))
{
if(n==0)
break;
tot=0;
for(int i=1;i<=n;i++)
{
scanf("%lf%lf%lf%lf",&b[i].x,&b[i].y,&b[i].z,&b[i].r);
}
if(n==1)
printf("0.000\n");
else
{
for(int i=1;i<=n;i++)
{
for(int k=i+1;k<=n;k++)
{
int u=i;
int v=k;
double w=sqrt(ji(b[i].x,b[i].y,b[k].x,b[k].y)+(b[i].z-b[k].z)*(b[i].z-b[k].z));
w-=b[i].r;
w-=b[k].r;
if(w<0.0)
w=0.0;
a[tot].u=u;
a[tot].v=v;
a[tot].w=w;
tot++;
}
}
sort(a,a+tot,cmp);
double ans=kru();
printf("%.3f\n",ans);
}
}
}

poj 2421 给出各点之间的联系 再给出已经连好的边(这时候用un操作一下) 然后kru

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<map>
#include<math.h>
using namespace std;
int fa[105];
int n;
int tot;
int cnt;
int ta[105][105];
void init()
{
for(int i=1;i<=n;i++)fa[i]=i;
}
int find(int x)
{
if(fa[x]==x)
return x;
return fa[x]=find(fa[x]);
}
void un(int x,int y)
{
int fx=find(x);
int fy=find(y);
if(fx==fy)
return ;
fa[fx]=fy;
return ;
}
struct node
{
int u,v,w;
};
node a[10050];
int cmp(node a,node b)
{
return a.w<b.w;
}
int kru()
{
int res=0;
cnt=0;
if(cnt==n-1)
return res;
for(int i=0;i<tot;i++)
{
int u=a[i].u;
int v=a[i].v;
int w=a[i].w;
if(find(u)!=find(v))
{
res+=w;
un(u,v);
cnt++;
}
if(cnt==n-1)
return res;
}
return -1;
}
int main(){
while(~scanf("%d",&n))
{
init();
cnt=0;
tot=0;
for(int i=1;i<=n;i++)
for(int k=1;k<=n;k++)
{
scanf("%d",&ta[i][k]);
}
int m;
scanf("%d",&m);
for(int i=1;i<=m;i++)
{
int u,v;
scanf("%d%d",&u,&v);
ta[u][v]=0;
ta[v][u]=0;
}
for(int i=1;i<=n;i++)
for(int k=1;k<=n;k++)
{
if(i<k)
{
a[tot].u=i;
a[tot].v=k;
a[tot].w=ta[i][k];
tot++;
}
}
sort(a,a+tot,cmp);
int ans=kru();
printf("%d\n",ans);
}
}

zoj 1586 每条边都要加上u v 所喜爱的插座的价格

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<map>
#include<math.h>
using namespace std;
int n;
int tot;
int price[1005];
int ta[1005][1005];
int fa[1005];
struct node
{
int u,v;
int w;
};
node a[1000050];
void init()
{
for(int i=1;i<=n;i++)fa[i]=i;
}
int find(int x)
{
if(fa[x]==x)
return x;
return fa[x]=find(fa[x]);
}
void un(int x,int y)
{
int fx=find(x);
int fy=find(y);
if(fx==fy)
return ;
fa[fx]=fy;
return ;
}
int kru()
{
init();
int res=0;
int cnt=0;
for(int i=0;i<tot;i++)
{
int u,v,w;
u=a[i].u;
v=a[i].v;
w=a[i].w;
if(find(u)!=find(v))
{
un(u,v);
res+=w;
cnt++;
}
if(cnt==n-1)
return res;
}
return -1;
}
int cmp(node a,node b)
{
return a.w<b.w;
}
int main(){
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&price[i]);
for(int i=1;i<=n;i++)
for(int k=1;k<=n;k++)
{
scanf("%d",&ta[i][k]);
}
tot=0;
if(n==1)
printf("0\n");
else
{
for(int i=1;i<=n;i++)
for(int k=i+1;k<=n;k++)
{
a[tot].u=i;
a[tot].v=k;
a[tot].w=ta[i][k]+price[i]+price[k];
tot++;
}
sort(a,a+tot,cmp);
int ans=kru();
printf("%d\n",ans);
}
}
}

poj 1789 如果两个字符串相同位置上的字母不同 res就加一 开始没读懂题意而被坑

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<map>
#include<math.h>
using namespace std;
int n;
int tot;
struct node{
int u,v,w;
};
struct code{
char s[10];
};
code b[2050];
int did(char s1[10],char s2[10])
{
int len=7;
int res=0;
for(int i=0;i<len;i++)
{
if(s1[i]!=s2[i])
res++;
}
return res;
}
node a[5000050];
int fa[2050];
void init(){
for(int i=1;i<=n;i++)
fa[i]=i;
}
int find(int x)
{
if(fa[x]==x)
return x;
return fa[x]=find(fa[x]);
}
void un(int x,int y)
{
int fx=find(x);
int fy=find(y);
if(fx==fy)
return ;
fa[fx]=fy;
return ;
}
int cmp(node a,node b)
{
return a.w<b.w;
}
int kru(){
int res=0;
int cnt=0;
for(int i=0;i<tot;i++)
{
int u=a[i].u;
int v=a[i].v;
int w=a[i].w;
if(find(u)!=find(v))
{
un(u,v);
cnt++;
res+=w;
}
if(cnt==n-1)
return res;
}
return -1;
}
int main(){
while(~scanf("%d",&n))
{
if(n==0)
break;
for(int i=1;i<=n;i++)
{
scanf("%s",b[i].s);
}
tot=0;
for(int i=1;i<=n;i++)
{
for(int k=i+1;k<=n;k++)
{
a[tot].u=i;
a[tot].v=k;
a[tot].w=did(b[i].s,b[k].s);
tot++;
}
}
if(n==1)
printf("The highest possible quality is 1/1.\n");
else{
init();
sort(a,a+tot,cmp);
int ans=kru();
printf("The highest possible quality is 1/%d.\n",ans);
}
}
}

poj 2349 给出点的数目和...空间跳跃传送器的个数?利用当年打机战的想象力强行A掉...

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<map>
#include<math.h>
using namespace std;
int m,n;
struct node{
double x;
double y;
};
node a[505];
int fa[505];
int tot;
struct edge{
int u,v;
double w;
};
edge b[250050];
void init(){
for(int i=1;i<=n;i++)fa[i]=i;
}
int find(int x){
if(fa[x]==x)
return x;
return fa[x]=find(fa[x]);
}
void un(int x,int y){
int fx=find(x);
int fy=find(y);
if(fx==fy)
return ;
fa[fx]=fy;
return ;
}
double kru(){
int cnt=m-1;
double res=0;
double ans=0;
if(cnt==n-1)
return res;
init();
for(int i=0;i<tot;i++){
int u=b[i].u;
int v=b[i].v;
double w=b[i].w;
if(find(u)!=find(v)){
cnt++;
un(u,v);
res+=w;
ans=w;
}
if(cnt==n-1){
return ans;
}
}
return -1;
}
int cmp(edge a,edge b){
return a.w<b.w;
}
int main(){
int t;
scanf("%d",&t);
while(t--){
scanf("%d%d",&m,&n);
for(int i=1;i<=n;i++){
scanf("%lf%lf",&a[i].x,&a[i].y);
}
tot=0;
if(n==1)
{
printf("0.00\n");
}
else{
for(int i=1;i<=n;i++){
for(int k=i+1;k<=n;k++){
int u,v;
double w;
u=i;
v=k;
w=sqrt((a[i].x-a[k].x)*(a[i].x-a[k].x)+(a[i].y-a[k].y)*(a[i].y-a[k].y));
b[tot].u=u;
b[tot].v=v;
b[tot].w=w;
tot++;
}
}
sort(b,b+tot,cmp);
/*for(int i=0;i<tot;i++){
printf("%d %d %.2f\n",b[i].u,b[i].v,b[i].w);
}*/
double ans=kru();
printf("%.2f\n",ans);
}
}
}

poj 1751 kru 给出已经连接的边 记录一下将要连接的边

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<map>
#include<math.h>
using namespace std;
int n,m;
struct point
{
double x,y;
};
point po[800];
int fa[800];
int tot;
struct node
{
int u,v;
double w;
};
node a[640000];
void init(){
for(int i=1;i<=n;i++)fa[i]=i;
}
int find(int x)
{
if(fa[x]==x)
return x;
return fa[x]=find(fa[x]);
}
void un(int x,int y){
int fx=find(x);
int fy=find(y);
if(fx==fy)
return ;
fa[fx]=fy;
return ;
}
int cnt;
int cmp(node a, node b)
{
return a.w<b.w;
}
int kru(){
double res=0;
for(int i=0;i<tot;i++){
int u=a[i].u;
int v=a[i].v;
double w=a[i].w;
if(find(u)!=find(v))
{
un(u,v);
cnt++;
res+=w;
printf("%d %d\n",u,v);
}
if(cnt==n-1)
return res;
}
return -1;
}
int main(){
while(~scanf("%d",&n))
{
tot=0;
for(int i=1;i<=n;i++)
{
scanf("%lf%lf",&po[i].x,&po[i].y);
}
init();
for(int i=1;i<=n;i++)
{
for(int k=i+1;k<=n;k++)
{
a[tot].u=i;
a[tot].v=k;
a[tot].w=sqrt((po[i].x-po[k].x)*(po[i].x-po[k].x)+(po[i].y-po[k].y)*(po[i].y-po[k].y));
tot++;
}
}
sort(a,a+tot,cmp);
cnt=0;
scanf("%d",&m);
for(int i=0;i<m;i++)
{
int u,v;
scanf("%d%d",&u,&v);
if(find(u)!=find(v))
{
un(u,v);
cnt++;
}
}
if(cnt==n-1)
printf("\n");
else
{
int ans=kru();
}
}
}

poj 1258 模板kru ..(虽然我是用prim打的..真的很省代码...)

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<map>
#include<math.h>
using namespace std;
int n;
int ans;
int ta[105][105];
int dis[105];
int vis[105];
void prim(){
for(int i=1;i<=n-1;i++){
int minn=999999999;
int w=0;
for(int k=1;k<=n;k++){
if(vis[k])
if(dis[k]<minn){
minn=dis[k];
w=k;
}
}
vis[w]=0;
ans+=dis[w];
for(int k=1;k<=n;k++){
if(vis[k])
if(ta[w][k]<dis[k]){
dis[k]=ta[w][k];
}
}
}
}
int main(){
while(~scanf("%d",&n)){
for(int i=1;i<=n;i++)
{
for(int k=1;k<=n;k++)
scanf("%d",&ta[i][k]);
}
ans=0;
for(int i=1;i<=n;i++){
dis[i]=999999999;
vis[i]=1;
}
vis[1]=0;
dis[1]=0;
for(int i=2;i<=n;i++)
{
dis[i]=ta[i][1];
}
prim();
printf("%d\n",ans);
}
}

poj 3026 kru混合bfs 因为数据范围小所以不会超时 被吃字符的原因弄得好累..需要注意的是 输入n m后 getchar会wa..因为n m后有多个空格?(网上说的)

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<map>
#include<math.h>
#include<queue>
#include<iostream>
using namespace std;
int n,m;
int fa[105];
char a[55][55];
bool vis[55][55];
int hao[55][55];
int geshu;
struct node
{
int u,v,w;
};
int bian;
node b[50050];
int dx[4]={0,0,-1,1};
int dy[4]={1,-1,0,0};
void bfs(int x,int y)
{
queue<int >q;
q.push(x);
q.push(y);
int tot=0;
q.push(tot);
vis[x][y]=false;
int u,v,w;
u=hao[x][y];
while(!q.empty())
{
x=q.front();q.pop();
y=q.front();q.pop();
tot=q.front();q.pop();
tot++;
int xx,yy;
for(int i=0;i<4;i++)
{
xx=x+dx[i];yy=y+dy[i];
if(xx>=0&&xx<n&&yy>0&&yy<m)
{
if(vis[xx][yy]==true)
{
if(a[xx][yy]!='#')
{
vis[xx][yy]=false;
if(a[xx][yy]!=' ')
{
v=hao[xx][yy];
w=tot;
b[bian].u=u;
b[bian].v=v;
b[bian].w=w;
bian++;
}
q.push(xx);
q.push(yy);
q.push(tot);
}
}
}
}
}
}
void init(){
for(int i=1;i<=geshu;i++)fa[i]=i;
}
int find(int x)
{
if(fa[x]==x)
return x;
return fa[x]=find(fa[x]);
}
void un(int x,int y)
{
int fx=find(x);
int fy=find(y);
if(fx==fy)
return ;
fa[fx]=fy;
return ;
}
int cmp(node a,node b)
{
return a.w<b.w;
}
int kru(){
int res=0;
int cnt=0;
for(int i=0;i<bian;i++)
{
int u=b[i].u;
int v=b[i].v;
int w=b[i].w;
if(find(u)!=find(v))
{
un(u,v);
cnt++;
res+=w;
}
if(cnt==geshu-1)
return res;
}
return -1;
}
int main(){
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&m,&n);
char tr[55];
gets(tr);
for(int i=0;i<n;i++)
{
gets(a[i]);
}
bian=0;
geshu=0;
for(int i=0;i<n;i++)
{
for(int k=0;k<m;k++)
{
if(a[i][k]=='A'||a[i][k]=='S')
{
geshu++;
hao[i][k]=geshu;
}
}
}
init();
//printf("%d\n",geshu);
if(geshu==1){
printf("0\n");
}
else{
for(int i=0;i<n;i++)
{
for(int k=0;k<m;k++)
{
if(a[i][k]=='A'||a[i][k]=='S')
{
memset(vis,true,sizeof(vis));
bfs(i,k);
}
}
}
sort(b,b+bian,cmp);
int ans=kru();
printf("%d\n",ans);
}
}
}

poj 1679 到连接第n-1条边的时候找一下 是否有多条边满足?

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<map>
#include<math.h>
using namespace std;
int n,m;
int fa[105];
int tot;
struct node
{
int u,v,w;
};
node a[10050];
void init()
{
for(int i=1; i<=n; i++)fa[i]=i;
}
int find(int x)
{
if(fa[x]==x)
return x;
return fa[x]=find(fa[x]);
}
void un(int x,int y)
{
int fx=find(x);
int fy=find(y);
if(fx==fy)
return ;
fa[fx]=fy;
return ;
}
int cmp(node a,node b)
{
return a.w<b.w;
}
int kru()
{
int res=0;
int cnt=0;
init();
for(int i=0; i<tot; i++)
{
int u=a[i].u;
int v=a[i].v;
int w=a[i].w;
if(find(u)!=find(v))
{
res+=w;
int many=0;
if(cnt==n-2)
{
for(int k=i; a[k].w==a[i].w; k++)
{
if(find(a[k].u)!=find(a[k].v))
{
many++;
}
}
if(many==1)
{
un(u,v);
return res;
}
else return -1;
}
else
{
un(u,v);
}
cnt++;
}
if(cnt==n-1)
return res; }
return -1;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
tot=0;
int u,v,w;
for(int i=0; i<m; i++)
{
scanf("%d%d%d",&u,&v,&w);
a[tot].u=u;
a[tot].v=v;
a[tot].w=w;
tot++;
}
if(n==1)
printf("0\n");
else{
sort(a,a+tot,cmp);
int ans=kru();
if(ans==-1)
printf("Not Unique!\n");
else printf("%d\n",ans);
}
}
}

hdu 1233 kru的模板懒得放代码了...

hdu 1301 和第一道题是同一道..

hdu 1875 有限制条件 判断一下即可

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<map>
#include<math.h>
using namespace std;
int n;
int tot;
int fa[105];
void init()
{
for(int i=1;i<=n;i++)fa[i]=i;
}
int find(int x)
{
if(fa[x]==x)
return x;
return fa[x]=find(fa[x]);
}
void un(int x,int y)
{
int fx=find(x);
int fy=find(y);
if(fx==fy)
return ;
fa[fx]=fy;
return ;
}
struct point
{
double x;
double y;
};
point po[105];
struct node
{
int u,v;
double w;
};
node a[10050];
int cmp(node a,node b)
{
return a.w<b.w;
}
double kru(){
init();
double res=0;
int cnt=0;
int i;
for(i=0;i<tot;i++)
{
if(a[i].w<10.0)
continue;
if(a[i].w>1000.0)
break;
int u,v;
double w;
u=a[i].u;
v=a[i].v;
w=a[i].w;
if(find(u)!=find(v))
{
cnt++;
res+=w;
un(u,v);
}
if(cnt==n-1)
return res;
}
return -1;
}
int main(){
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
tot=0;
for(int i=1;i<=n;i++)
{
scanf("%lf%lf",&po[i].x,&po[i].y);
}
if(n==1)
printf("0.0\n");
else
{
for(int i=1;i<=n;i++)
for(int k=i+1;k<=n;k++)
{
a[tot].u=i;
a[tot].v=k;
a[tot].w=sqrt((po[i].x-po[k].x)*(po[i].x-po[k].x)+(po[i].y-po[k].y)*(po[i].y-po[k].y));
tot++;
}
sort(a,a+tot,cmp);
double ans=kru();
int many=0;
for(int i=1;i<=n;i++)
{
if(fa[i]==i)many++;
}
ans*=100.0;
if(many==1)
printf("%.1f\n",ans);
else printf("oh!\n");
}
}
}

[kuangbin带你飞]专题六 最小生成树的更多相关文章

  1. [kuangbin带你飞]专题六 最小生成树 POJ 2421 Constructing Roads

    给一个n个点的完全图 再给你m条道路已经修好 问你还需要修多长的路才能让所有村子互通 将给的m个点的路重新加权值为零的边到边集里 然后求最小生成树 #include<cstdio> #in ...

  2. [ An Ac a Day ^_^ ][kuangbin带你飞]专题六 最小生成树 POJ 2031 Building a Space Station

    最小生成树模板题 注意最后输出用%f (从C99开始%f已经不能用于输出double 即 输入用%lf 输出用%f) #include<cstdio> #include<algori ...

  3. [kuangbin带你飞]专题六 最小生成树 POJ 1287 Networking

    最小生成树模板题 跑一次kruskal就可以了 /* *********************************************** Author :Sun Yuefeng Creat ...

  4. [ An Ac a Day ^_^ ] [kuangbin带你飞]专题六 最小生成树 POJ 1251 Jungle Roads

    题意: 有n个点 每个点上有一些道路 求最小生成树 解释下输入格式 A n v1 w1 v2 w2 A点上有n条边 A到v1权值是w1 A到v2权值是w2 思路: 字符串处理之后跑kruskal求最小 ...

  5. [kuangbin带你飞]专题六 最小生成树 N - 畅通工程再续

    相信大家都听说一个“百岛湖”的地方吧,百岛湖的居民生活在不同的小岛中,当他们想去其他的小岛时都要通过划小船来实现.现在政府决定大力发展百岛湖,发展首先要解决的问题当然是交通问题,政府决定实现百岛湖的全 ...

  6. [kuangbin带你飞]专题1-23题目清单总结

    [kuangbin带你飞]专题1-23 专题一 简单搜索 POJ 1321 棋盘问题POJ 2251 Dungeon MasterPOJ 3278 Catch That CowPOJ 3279 Fli ...

  7. 【算法系列学习三】[kuangbin带你飞]专题二 搜索进阶 之 A-Eight 反向bfs打表和康拓展开

    [kuangbin带你飞]专题二 搜索进阶 之 A-Eight 这是一道经典的八数码问题.首先,简单介绍一下八数码问题: 八数码问题也称为九宫问题.在3×3的棋盘,摆有八个棋子,每个棋子上标有1至8的 ...

  8. [ An Ac a Day ^_^ ] [kuangbin带你飞]专题八 生成树 UVA 10600 ACM Contest and Blackout 最小生成树+次小生成树

    题意就是求最小生成树和次小生成树 #include<cstdio> #include<iostream> #include<algorithm> #include& ...

  9. [kuangbin带你飞]专题十六 KMP & 扩展KMP & Manacher 题解报告

    来刷kuangbin字符串了,字符串处理在ACM中是很重要的,一般比赛都会都1——2道有关字符串处理的题目,而且不会很难的那种,大多数时候都是用到一些KMP的性质或者找规律. 点击标题可跳转至VJ比赛 ...

随机推荐

  1. 6个朋友(codevs 2832)

    2832 6个朋友  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解       题目描述 Description 有这么一种说法:认识6个人,你就认识全世 ...

  2. 如何给Eclipse中添加库(jar包)

    折腾Eclipse时,经常会遇到这种情况: 缺少某个库,找到之后,需要将该库,jar包,加入到当前项目,使得代码中的import xxx得以正常导入. 举例: [已解决]Eclipse的java代码出 ...

  3. iOS的I/O操作

    一般而言,处理文件时都要经历以下四个步骤: 1.创建文件 2.打开文件,以便在后面的I/O操作中引用该文件 3.对打开的文件执行I/O操作(读取.写入.更新) 4.关闭文件 iOS中,对文件常见的处理 ...

  4. Wcf for wp8 连接数据库,读写数据库,显示数据库数据(二)

    下载: Microsoft® SQL Server® 2012 Express http://www.microsoft.com/zh-cn/download/details.aspx?id=2906 ...

  5. phpcms v9 如何实现用户登录

    因为有时候我们需要自己实现用户登录,比如我们用phpcms做一个微信Oauth2.0授权,授权之后直接登录,这过程中不需要用户输入账户和密码.所以我们就要搞清楚,phpcmsv9它是怎么实现用户登录的 ...

  6. 使用startActivityForResult方法(转)

    功能:  A.java 是主界面,B.java 是子功能模块,要从A启动B,B干完活之后把结果汇报给A 注意: 使用startActivityForResult方法 在配置文件就是不能指定Activi ...

  7. scp 使用

    [spark-hadoop@master ~]$ sudo scp /etc/profile spark-hadoop@slave1:/etc spark-hadoop@slave1's passwo ...

  8. SharedPreferences存储

    *通过getSharedPreferences()方法获得SharedPreferences对象 SharedPreferences pref = getShaedPreferences(“key”, ...

  9. PHP 5.4 中经 htmlspecialchars 转义后的中文字符串为空,DeDeCMS在PHP5.4下编辑器中文不显示问题

    在加入 发布招聘功能的时候,出现问题了,就是修改招聘信息的时候.编辑器内容不显示,只显示英文,中文不显示,以前记得开发此功能没这问题啊!然后各种原因找不出,没办法,从编辑器函数入手,一步一步查,查到 ...

  10. TFS2012团队管理基本配置及基础使用方法

    本文介绍如何在VS2012中使用微软提供的TFS2012服务器进行团队协作开发,免费默认只支持5用户,主要分为两大步服务器配置跟客户端配置. 转载请标注:http://www.kwstu.com/Ar ...