先简单说一下,生成最小树一般常用两种算法,一种是prim另一种是kruskal,两种算法也各有利弊,比如说prim编程比较复杂一些而kruskal编程则相对容易一些,但是时间复杂度却差了些。
prim跟dijkstra差不多,简单来说prim适合稠密图,而kurskal则适合稀疏图。

文章目录

  • 1.POJ - 1251(生成最小树模板题)
  • 2.POJ - 1287(模板题)
  • 3.POJ 2031(生成最小树)
  • 4. POJ-2421
  • 5.ZOJ - 1586(模板题)
  • 6.POJ - 1789
  • 7.POJ - 2349(生成最小树中的最大的边权)
  • 8.POJ - 1751
  • 9.POJ-1258(模板题)
  • 10.HDU1233(模板题)
  • 11.HDU-1301
  • 12.HDU-1875
  • 13.POJ-3026(bfs+kruskal)

1.POJ - 1251(生成最小树模板题)

这个题也就是把字母转换成数字,直接套用模板即可。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <string>
#include <list>
#include <set>
#include <queue>
#include <map>
#include <stack>
#include <algorithm>
#include <stdlib.h>
#include <vector>
#define maxn  1010
const int MaxN = 0x3f3f3f3f;
const int MinN = 0xc0c0c00c;
typedef long long ll;
ll mod = 998244353;
using namespace std;
struct wazxy{int u,v,w;
}edge[maxn];
int f[maxn];
int ans=0,k=0;
struct rule{bool operator()(const wazxy &a,const wazxy & b){return a.w<b.w;}
};
int ifind(int x){if(x==f[x]) return x;else return f[x]=ifind(f[x]);
}void kruskal(){ans=0;sort(edge,edge+k,rule());for(int i=0;i<k;i++){int dx=ifind(edge[i].u);int dy=ifind(edge[i].v);if(dx==dy) continue;f[dx]=dy;ans+=edge[i].w;}
}int main()
{int n;while(cin>>n&&n){for(int i=0;i<30;i++) f[i]=i;int w,m;k=0;char x,y;for(int i=0;i<n-1;i++){cin>>x>>m;for(int j=0;j<m;j++){cin>>y>>w;edge[k].u=(int)(x-'A');edge[k].v=(int)(y-'A');edge[k++].w=w;}}kruskal();cout<<ans<<endl;}return 0;
}

2.POJ - 1287(模板题)


网友的翻译我是爱了。
是个稠密图应该用prim,但是我用了kruskal(好写)

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <string>
#include <list>
#include <set>
#include <queue>
#include <map>
#include <stack>
#include <algorithm>
#include <stdlib.h>
#include <vector>
#define maxn  1000000
const int MaxN = 0x3f3f3f3f;
const int MinN = 0xc0c0c00c;
typedef long long ll;
ll mod = 998244353;
using namespace std;
struct wazxy{int u,v,w;
}edge[maxn];
int f[maxn];
int n,m;
int ans=0;
struct rule{bool operator()(const wazxy &a,const wazxy & b){return a.w<b.w;}
};
int ifind(int x){if(x==f[x]) return x;else return f[x]=ifind(f[x]);
}void kruskal(){ans=0;sort(edge,edge+m,rule());for(int i=0;i<m;i++){int dx=ifind(edge[i].u);int dy=ifind(edge[i].v);if(dx==dy) continue;f[dx]=dy;ans+=edge[i].w;}
}int main()
{while(cin>>n&&n){cin>>m;for(int i=0;i<=n;i++) f[i]=i;for(int i=0;i<m;i++){scanf("%d%d%d",&edge[i].u,&edge[i].v,&edge[i].w);}kruskal();cout<<ans<<endl;}return 0;
}

3.POJ 2031(生成最小树)

这个题注意一下他们之间的权值是怎么的来的就行了,也算是个板子题把

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <string>
#include <list>
#include <set>
#include <queue>
#include <map>
#include <stack>
#include <algorithm>
#include <stdlib.h>
#include <vector>
#define maxn  10010
const int MaxN = 0x3f3f3f3f;
const int MinN = 0xc0c0c00c;
typedef long long ll;
ll mod = 998244353;
using namespace std;
struct wazxy{int u,v;double w;
}edge[maxn];
struct ss{double x,y,z,r;
}a[maxn];
int f[maxn];
int n,m;
double ans=0;
struct rule{bool operator()(const wazxy &a,const wazxy & b){return a.w<b.w;}
};
int ifind(int x){if(x==f[x]) return x;else return f[x]=ifind(f[x]);
}void kruskal(){ans=0;sort(edge,edge+m,rule());for(int i=0;i<m;i++){int dx=ifind(edge[i].u);int dy=ifind(edge[i].v);if(dx==dy) continue;f[dx]=dy;ans+=edge[i].w;}
}
double judge(ss a,ss b){double temp=sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)+(a.z-b.z)*(a.z-b.z));if(temp<=a.r+b.r) return 0;return temp-a.r-b.r;
}
int main()
{while(cin>>n&&n){m=0;for(int i=0;i<maxn;i++) f[i]=i;for(int i=0;i<n;i++){scanf("%lf%lf%lf%lf",&a[i].x,&a[i].y,&a[i].z,&a[i].r);}for(int i=0;i<n;i++){for(int j=i+1;j<n;j++){edge[m].u=i;edge[m].v=j;edge[m++].w=judge(a[i],a[j]);}}kruskal();printf("%.3f\n",ans);}return 0;
}

4. POJ-2421

这个题有些边已经连接起来了,所以我们提前把他连好的边加到树里就可以了

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <string>
#include <list>
#include <set>
#include <queue>
#include <map>
#include <stack>
#include <algorithm>
#include <stdlib.h>
#include <vector>
#define maxn  1000000
const int MaxN = 0x3f3f3f3f;
const int MinN = 0xc0c0c00c;
typedef long long ll;
ll mod = 998244353;
using namespace std;
struct wazxy{int u,v,w;
}edge[maxn];
int f[maxn];
int n,m,k;
int ans=0;
struct rule{bool operator()(const wazxy &a,const wazxy & b){return a.w<b.w;}
};
int ifind(int x){if(x==f[x]) return x;else return f[x]=ifind(f[x]);
}void kruskal(){ans=0;sort(edge,edge+k,rule());for(int i=0;i<k;i++){int dx=ifind(edge[i].u);int dy=ifind(edge[i].v);if(dx==dy) continue;f[dx]=dy;ans+=edge[i].w;}
}int main()
{cin>>n;for(int i=0;i<=n;i++) f[i]=i;for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){int x;scanf("%d",&x);if(i==j) continue;edge[k].u=i;edge[k].v=j;edge[k++].w=x;}}cin>>m;for(int i=0;i<m;i++){int x,y;cin>>x>>y;int dx=ifind(x);int dy=ifind(y);if(dx==dy) continue;f[dx]=dy;}kruskal();cout<<ans<<endl;return 0;
}

5.ZOJ - 1586(模板题)

这个题与模板题不同的一点是,每个点都有自己的花费,假设链接a b两点,则权值为ab两点之间的权值+a的花费+b的花费

#pragma GCC optimize(3,"Ofast","inline")
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <string>
#include <list>
#include <set>
#include <queue>
#include <map>
#include <stack>
#include <algorithm>
#include <stdlib.h>
#include <vector>
#define maxn  1010
const int MaxN = 0x3f3f3f3f;
const int MinN = 0xc0c0c00c;
typedef long long ll;
ll mod = 998244353;
using namespace std;
int a[maxn],f[maxn];
struct wazxy{int u,v,w;
}e[maxn*maxn];
int n,k;
int ans=0;
struct rule{bool operator ()(const wazxy & a,const wazxy & b){return a.w<b.w;}
};int ifind(int x){if(x==f[x]) return x;return f[x]=ifind(f[x]);
}void kruskal(){sort(e,e+k,rule());for(int i=0;i<k;i++){int dx=ifind(e[i].u);int dy=ifind(e[i].v);if(dx==dy) continue;else{ans+=e[i].w;f[dx]=dy;}}
}
int main()
{int t;cin>>t;while(t--){for(int i=0;i<maxn;i++) f[i]=i;ans=0,k=0;cin>>n;int x;for(int i=1;i<=n;i++) cin>>a[i];for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){scanf("%d",&x);if(i==j) continue;e[k].u=i;e[k].v=j;e[k++].w=x+a[i]+a[j];}}//for(int i=0;i<k;i++) cout<<e[i].w<<" ";kruskal();cout<<ans<<endl;}return 0;
}

6.POJ - 1789

把每个字符串看成一个点,每个点之间的权值就是他们对应不同的字符个数
这个题练习了一下prim算法,毕竟是个稠密图

#pragma GCC optimize(3,"Ofast","inline")
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <string>
#include <list>
#include <set>
#include <queue>
#include <map>
#include <stack>
#include <algorithm>
#include <stdlib.h>
#include <vector>
#define maxn  2010
const int MaxN = 0x3f3f3f3f;
const int MinN = 0xc0c0c00c;
typedef long long ll;
ll mod = 998244353;
using namespace std;
int n;
string s[maxn];
int maps[maxn][maxn];
int dis[maxn];
bool visited[maxn];
int dif(int x,int y){int ans=0;for(int i=0;i<7;i++){if(s[x][i]!=s[y][i]) ans++;}return ans;
}
struct node{int id,dis;node(int a,int b){id=a,dis=b;}bool operator < (const node & a)const{return dis>a.dis;}
};
int prim(){int ans=0;memset(dis,MaxN,sizeof(dis));priority_queue<node> q;dis[1]=0;q.push(node(1,0));while(!q.empty()){node temp=q.top();q.pop();int now=temp.id;if(visited[now]) continue;visited[now]=true;ans+=dis[now];for(int i=1;i<=n;i++){if(i==now) continue;int val=maps[now][i];if(!visited[i]&&dis[i]>val){dis[i]=val;q.push(node(i,dis[i]));}}}return ans;}int main()
{while(cin>>n&&n){memset(visited,false,sizeof(visited));for(int i=1;i<=n;i++) cin>>s[i];for(int i=1;i<=n;i++){for(int f=1;f<=n;f++){if(i==f) continue ;maps[i][f]=dif(i,f);}}cout<<"The highest possible quality is 1/"<<prim()<<"."<<endl;}}

7.POJ - 2349(生成最小树中的最大的边权)

题意:给你n个点的二维坐标,求生成最小树中到数第k大的边权为多少
拿一个数组来记录一下边,然后sort一下输出即可

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <string>
#include <list>
#include <set>
#include <queue>
#include <map>
#include <stack>
#include <algorithm>
#include <stdlib.h>
#include <vector>
#define maxn  510
const int MaxN = 0x3f3f3f3f;
const int MinN = 0xc0c0c00c;
typedef long long ll;
ll mod = 998244353;
using namespace std;
struct wazxy{int u,v;double w;
}edge[maxn*maxn];
int f[maxn];
double b[maxn];
int n,m,k,cnt,cnt1;
double ans=0;
struct node{double x,y;
}a[maxn];
struct rule{bool operator()(const wazxy &a,const wazxy & b){return a.w<b.w;}
};
int ifind(int x){if(x==f[x]) return x;else return f[x]=ifind(f[x]);
}void kruskal(){ans=0;sort(edge,edge+cnt,rule());for(int i=0;i<cnt;i++){int dx=ifind(edge[i].u);int dy=ifind(edge[i].v);if(dx==dy) continue;f[dx]=dy;ans+=edge[i].w;b[cnt1++]=edge[i].w;}
}
double dis(int x, int y){return sqrt((a[x].x-a[y].x)*(a[x].x-a[y].x)+(a[x].y-a[y].y)*(a[x].y-a[y].y));
}
int main()
{int t;cin>>t;while(t--){for(int i=0;i<maxn;i++) f[i]=i;cnt=0,cnt1=0;cin>>k>>m;for(int i=1;i<=m;i++) cin>>a[i].x>>a[i].y;for(int i=1;i<=m;i++){for(int j=1;j<=m;j++){if(i==j) continue ;edge[cnt].u=i;edge[cnt].v=j;edge[cnt++].w=dis(i,j);}}kruskal();sort(b,b+cnt1);printf("%.2f\n",b[cnt1-k]);}return 0;
}

8.POJ - 1751

天啦噜,这个题前期tle都tle到天上了,建议G++提交(我也不知道为什么)
存边的时候注意一下存一次就够了不要重了,不然带来的就是tle

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <string>
#include <list>
#include <set>
#include <queue>
#include <map>
#include <stack>
#include <algorithm>
#include <stdlib.h>
#include <vector>
#define maxn  1010
const int MaxN = 0x3f3f3f3f;
const int MinN = 0xc0c0c00c;
typedef long long ll;
ll mod = 998244353;
using namespace std;
struct wazxy{int u,v;double w;
}edge[maxn*maxn];
int f[maxn];
double b[maxn];
int n,m,k,cnt;
double ans=0;
struct node{double x,y;
}a[maxn];
struct rule{bool operator()(const wazxy &a,const wazxy & b){return a.w<b.w;}
};
int ifind(int x){if(x==f[x]) return x;else return f[x]=ifind(f[x]);
}void kruskal(){sort(edge,edge+cnt,rule());for(int i=0;i<cnt;i++){int dx=ifind(edge[i].u);int dy=ifind(edge[i].v);if(dx==dy) continue;f[dx]=dy;printf("%d %d\n",edge[i].u,edge[i].v);}
}
inline double dis(int x, int y){return sqrt((a[x].x-a[y].x)*(a[x].x-a[y].x)+(a[x].y-a[y].y)*(a[x].y-a[y].y));
}
int main()
{for(int i=0;i<maxn;i++) f[i]=i;cnt=0;cin>>m;for(int i=1;i<=m;i++) scanf("%lf%lf",&a[i].x,&a[i].y);for(int i=1;i<=m;i++){for(int j=i+1;j<=m;j++){edge[cnt].u=i;edge[cnt].v=j;edge[cnt++].w=dis(i,j);}}cin>>m;for(int i=0;i<m;i++){int x,y;scanf("%d%d",&x,&y);int dx=ifind(x);int dy=ifind(y);if(dx==dy) continue ;f[dx]=dy;}kruskal();return 0;
}

9.POJ-1258(模板题)

模板模板模板

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <string>
#include <list>
#include <set>
#include <queue>
#include <map>
#include <stack>
#include <algorithm>
#include <stdlib.h>
#include <vector>
#define maxn  110
const int MaxN = 0x3f3f3f3f;
const int MinN = 0xc0c0c00c;
typedef long long ll;
ll mod = 998244353;
using namespace std;
struct wazxy{int u,v;int w;
}edge[maxn*maxn];
int f[maxn];
int n,m,k,cnt;
int ans=0;
struct rule{bool operator()(const wazxy &a,const wazxy & b){return a.w<b.w;}
};
int ifind(int x){if(x==f[x]) return x;else return f[x]=ifind(f[x]);
}void kruskal(){sort(edge,edge+cnt,rule());ans=0;for(int i=0;i<cnt;i++){int dx=ifind(edge[i].u);int dy=ifind(edge[i].v);if(dx==dy) continue;f[dx]=dy;ans+=edge[i].w;}
}int main()
{while(cin>>m){for(int i=0;i<maxn;i++) f[i]=i;cnt=0;for(int i=1;i<=m;i++){for(int j=1;j<=m;j++){int x;scanf("%d",&x);if(i<=j) continue;edge[cnt].u=i;edge[cnt].v=j;edge[cnt++].w=x;}}kruskal();cout<<ans<<endl;}return 0;
}

10.HDU1233(模板题)

这个之前写过

#pragma GCC optimize(3,"Ofast","inline")
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <math.h>
#include <string>
#include <list>
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <algorithm>
#include <stdlib.h>
#define maxn  110
//#define true false
//#define false true
const int MaxN = 0x3f3f3f3f;
const int MinN = 0xc0c0c00c;
const double pi = acos(-1);
typedef long long ll;
const int mod = 1e9 + 7;
using namespace std;
int f[maxn];
struct wazxy{int u,v,w;
}a[maxn*maxn];int ifind(int x){if(x==f[x]) return x;else return f[x]=ifind(f[x]);
}
struct rule{bool operator()(const wazxy & a,const wazxy & b){return a.w<b.w;}
};int main()
{int n;while(cin>>n&&n){int m=n*(n-1)/2;for(int i=1;i<=m;i++){scanf("%d%d%d",&a[i].u,&a[i].v,&a[i].w);}sort(a+1,a+m+1,rule());int ans=0;for(int i=1;i<=n;i++) f[i]=i;for(int i=1;i<=m;i++){int dx=ifind(a[i].u);int dy=ifind(a[i].v);if(dx==dy) continue;f[dx]=dy;ans+=a[i].w;}cout<<ans<<endl;}return 0;
}

11.HDU-1301

ps跟第一题一样的

12.HDU-1875

这个题注意判断一下哪些边不可取即可,这里我是在存图的时候判断的边长度是否符合题意,不符合就不加入。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <string>
#include <list>
#include <set>
#include <queue>
#include <map>
#include <stack>
#include <algorithm>
#include <stdlib.h>
#include <vector>
#define maxn  110
const int MaxN = 0x3f3f3f3f;
const int MinN = 0xc0c0c00c;
typedef long long ll;
ll mod = 998244353;
using namespace std;
struct wazxy{int u,v;double w;
}edge[maxn*maxn];
int f[maxn];
bool visited[maxn];
int n,m,k,cnt;
double ans=0;
struct node{double x,y;
}a[maxn];
struct rule{bool operator()(const wazxy &a,const wazxy & b){return a.w<b.w;}
};
int ifind(int x){if(x==f[x]) return x;else return f[x]=ifind(f[x]);
}
void init(){for(int i=0;i<maxn;i++) f[i]=i;memset(visited,false,sizeof(visited));cnt=0,ans=0;
}
double dis(int x,int y){double temp=(a[x].x-a[y].x)*(a[x].x-a[y].x)+(a[x].y-a[y].y)*(a[x].y-a[y].y);temp=sqrt(temp);if(temp>1000||temp<10) return -1;return temp;
}
void kruskal(){sort(edge,edge+cnt,rule());for(int i=0;i<cnt;i++){int dx=ifind(edge[i].u);int dy=ifind(edge[i].v);if(dx==dy) continue;ans+=edge[i].w;visited[edge[i].u]=true;visited[edge[i].v]=true;f[dx]=dy;}
}int main()
{int t;cin>>t;while(t--){init();cin>>n;for(int i=1;i<=n;i++){cin>>a[i].x>>a[i].y;}for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){double temp=dis(i,j);if(temp==-1) continue;edge[cnt].u=i;edge[cnt].v=j;edge[cnt++].w=dis(i,j);}}kruskal();bool flag=true;for(int i=1;i<=n;i++){if(!visited[i]) flag=false;//cout<<visited[i]<<endl;}if(flag==false) cout<<"oh!"<<endl;else printf("%.1f\n",ans*100);}return 0;
}

13.POJ-3026(bfs+kruskal)

这个题说难吧,他不难,就是挺麻烦的。
这个题先给你些许个点,每个点的距离需要你自己bfs计算出来。
我做这个题的时候出了好多bug,但是都是小问题,很快就调好了
注意:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <string>
#include <list>
#include <set>
#include <queue>
#include <map>
#include <stack>
#include <algorithm>
#include <stdlib.h>
#include <vector>
#define maxn  510
const int MaxN = 0x3f3f3f3f;
const int MinN = 0xc0c0c00c;
typedef long long ll;
ll mod = 998244353;
using namespace std;
struct wazxy{int u,v;int w;
}edge[maxn*maxn];
char s[maxn];
int n,m,num,rem,cnt,ans;
int a[maxn][maxn],f[maxn];
int dx[4]={1,-1,0,0};
int dy[4]={0,0,1,-1};
bool visited[maxn][maxn];
struct node{int x,y,steps;node(int a,int b,int c){x=a,y=b,steps=c;}
};
struct rule{bool operator()(const wazxy &a,const wazxy & b){return a.w<b.w;}
};
int ifind(int x){if(x==f[x]) return x;else return f[x]=ifind(f[x]);
}void init(){memset(a,-1,sizeof(a));for(int i=0;i<maxn;i++) f[i]=i;num=1,cnt=0;
}void bfs(int x,int y){queue<node> q;visited[x][y]=true;q.push(node(x,y,0));while(!q.empty()){node temp=q.front();q.pop();if(a[temp.x][temp.y]>0&&a[temp.x][temp.y]!=rem){edge[cnt].u=rem;edge[cnt].v=a[temp.x][temp.y];edge[cnt++].w=temp.steps;// cout<<a[temp.x][temp.y]<<endl;}for(int i=0;i<4;i++){int nx=temp.x+dx[i],ny=temp.y+dy[i];if(!visited[nx][ny]&&a[nx][ny]>=0){visited[nx][ny]=true;//  cout<<nx<<" "<<ny<<endl;q.push(node(nx,ny,temp.steps+1));}}}
}void kruskal(){sort(edge,edge+cnt,rule());ans=0;for(int i=0;i<cnt;i++){int xx=ifind(edge[i].u);int yy=ifind(edge[i].v);if(xx==yy) continue;ans+=edge[i].w;f[xx]=yy;}
}int main()
{int t;cin>>t;while(t--){int n,m;init();cin>>m>>n;gets(s);for(int i=1;i<=n;i++){gets(s);for(int j=0;j<m;j++){if(s[j]==' ') a[i][j+1]=0;else if(s[j]=='A'||s[j]=='S') a[i][j+1]=num++;}}//        for(int i=1;i<=n;i++){//            for(int j=1;j<=m;j++){//                cout<<a[i][j]<<" ";
//            }
//            cout<<endl;
//        }for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){if(a[i][j]>0){rem=a[i][j];memset(visited,false,sizeof(visited));bfs(i,j);//   cout<<"1"<<endl;}}}kruskal();cout<<ans<<endl;}return 0;
}

[kuangbin带你飞]专题六-生成最小树相关推荐

  1. [kuangbin带你飞]专题六 最小生成树 L - 还是畅通工程 (简单最小生成树)

    L - 还是畅通工程 题目链接:https://vjudge.net/contest/66965#problem/L 题目: 某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离.省政府&qu ...

  2. kuangbin带你飞专题合集

    题目列表 [kuangbin带你飞]专题一 简单搜索 [kuangbin带你飞]专题二 搜索进阶 [kuangbin带你飞]专题三 Dancing Links [kuangbin带你飞]专题四 最短路 ...

  3. “kuangbin带你飞”专题计划——专题十四:数论基础

    写在前面 1.目前还没啥写的.开始时间:2021-05-13(其实博客上看得到该博客创建时间的) 2.上一个专题刷的是网络流(博客总结),属于第一次接触.本来想的是一周特别高效,然后一周略划水,结果是 ...

  4. (2021-07-14~)“kuangbin带你飞”专题计划——专题十三:基础计算几何

    目录 前言 参考博客 自己总结的东西: 难度判断? 题目 1.[TOYS POJ - 2318 ](解决) 2.[Toy Storage POJ - 2398 ](解决) 3.[Segments PO ...

  5. kuangbin带你飞 专题1-23 题单

    kuangbin大神,对于打过ACM比赛的ACMer,无人不知无人不晓. 在此,附上vjudge平台上一位大神整理的[kuangbin带你飞]专题目录链接. [kuangbin带你飞专题目录1-23] ...

  6. [kuangbin带你飞]专题十二 基础DP1 题解+总结

    kuangbin带你飞:点击进入新世界 总结: 简单dp,最近在做,持续更新. 文章目录 总结: 1.Max Sum Plus Plus 2.Ignatius and the Princess IV ...

  7. [kuangbin带你飞]专题五 并查集 题解+总结

    kuangbin带你飞:点击进入新世界 总结: 本人算是初学者中的初学者,欢迎交流~ 并查集的接触过的不多,大概只有普通并查集,带权并查集,种族并查集,传说中的可持续化并查集只是听说过还没有接触,不过 ...

  8. [kuangbin带你飞]专题一 做题顺序与题解 【简单搜索】

    随便说点: 博主正在刷kuangbin专题的题目,初学者,没接触过什么算法,刷题的初衷是备战蓝桥杯,后来发现了算法资料大多是针对acm的,挑选kuangbin专题入门也是如此,毕竟这样分类看起来比较有 ...

  9. [kuangbin带你飞]专题1

    专题一 简单搜索 POJ 1321 棋盘问题 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大 ...

最新文章

  1. datax 持续数据同步_Datax 数据同步
  2. 个人小应用服务器安装搭建,HP 360p Gen9 使用winpe安装centos[一]
  3. 根据二叉树前序遍历和中序遍历重建二叉树
  4. (常用API)正则表达式切割练习
  5. Angular应用 vendor.js里的magic number 16384是什么含义
  6. linux7基础——给用户添加sudo权限
  7. RTX5 | 线程管理04 - 线程加入osThreadJoin
  8. kasp技术原理_KASP基因型测定技术在各个学科的应用实践(内附官方重要资料)...
  9. 对于大多数的中小微企业,产品是你成功的1.0阶段
  10. TypeScript实战:下棋游戏
  11. 拓扑排序算法分析(通俗易懂)
  12. codesys写文件到远程并在远程读取文件
  13. 1.深入理解C/C++中头文件(.h)与源文件(.c/.cpp)以及我们为什么需要.h头文件
  14. 这个可以有!百度大脑EasyDL新发布EasyData搞定AI开发中的数据管理问题
  15. vostro3470装win7_dell latitude3470怎么安装win7系统
  16. python字符串的内部函数_「Python」字符串操作内置函数
  17. 编写程序,求出几何形状(长方形、正方形、圆形)的周长和面积
  18. ArcGIS 10.2.2支持无损CityGML格式进行3D城市建模
  19. 【学习贴】Ps终极动画练习
  20. 三维点云课程(六)——三维目标检测

热门文章

  1. 教你如何利用DroidCam将手机摄像头用作电脑摄像头|瞬间提升画质!
  2. 15年经验分享:40个改变编程技能的小技巧
  3. 【OpenCV 4开发详解】Scharr算子
  4. windows10+虚拟机Ubuntu17.10+Anaconda+Python2
  5. 青桔单车 chameleon 跨平台实践
  6. 可见面判别算法---可见面判别算法的分类
  7. Device Tree(三):代码分析
  8. 80热敏打印机打印TxPrnMod.dll
  9. 让智能手机和居家电脑互联互通(WM6 GPRS)
  10. Spring事务管理3----声明式事务管理(1)