A - Jungle Roads 题目链接

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <iostream>
using namespace std;const int INF=0x3f3f3f3f;
const int MAXN=30;
bool vis[MAXN];
int lowc[MAXN];
int cost[MAXN][MAXN];int Prim(int n)
{int ans=0;memset(vis,false,sizeof(vis));memset(lowc,0,sizeof(lowc));vis[0]=true;for(int i=1;i<n;i++)lowc[i]=cost[0][i];for(int i=1;i<n;i++){int minc=INF;int p=-1;for(int j=0;j<n;j++){if(!vis[j]&&minc>lowc[j]){minc=lowc[j];p=j;}}if(minc==INF)return -1;ans+=minc;vis[p]=true;for(int j=0;j<n;j++){if(!vis[j]&&lowc[j]>cost[p][j])lowc[j]=cost[p][j];}}return ans;
}void init(int n)
{for(int i=0;i<n;i++)for(int j=0;j<n;j++){if(i==j)cost[i][j]=0;elsecost[i][j]=cost[j][i]=INF;}
}int main()
{int n,m,a;char s[10],ss[10];while(scanf("%d",&n)==1){if(n==0)break;init(n);for(int i=1;i<n;i++){scanf("%s%d ",&s,&m);for(int j=0;j<m;j++){scanf("%s%d ",&ss,&a);cost[s[0]-'A'][ss[0]-'A']=cost[ss[0]-'A'][s[0]-'A']=a;}}   printf("%d\n",Prim(n));}return 0;
}

B -  Networking 题目链接

#include <stdio.h>
#include <string.h>
#include <set>
#include <map>
#include <algorithm>
using namespace std;const int INF=0x3f3f3f3f;
const int MAXN=59;
bool vis[MAXN];
int lowc[MAXN];
int cost[109][109];int Prim(int n)
{int ans=0;memset(vis,false,sizeof(vis));vis[1]=true;for(int i=2;i<=n;i++)lowc[i]=cost[1][i];for(int i=2;i<=n;i++){int minc=INF;int p=-1;for(int j=1;j<=n;j++){if(!vis[j]&&minc>lowc[j]){minc=lowc[j];p=j;}}if(minc==INF)return -1;ans+=minc;vis[p]=true;for(int j=1;j<=n;j++){if(!vis[j]&&lowc[j]>cost[p][j])lowc[j]=cost[p][j];}}return ans;
}void init(int n)
{for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)cost[i][j]=cost[j][i]=INF;
}
int main()
{int n,m;while(scanf("%d",&n)==1){if(n==0)break;scanf("%d",&m);init(n);while(m--){int a,b,time;scanf("%d%d%d",&a,&b,&time);if(cost[a][b]>time){cost[a][b]=cost[b][a]=time;}}/*for(int i=1;i<n;i++)for(int j=1;j<=n;j++)printf("%d ",cost[i][j]);*/printf("%d\n",Prim(n));}return 0;
}

C -  Building a Space Station 题目链接

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <iostream>
#include <stdlib.h>
using namespace std;const double INF=0x3f3f3f3f;
const int MAXN=109;
bool vis[MAXN];
double lowc[MAXN];
double cost[MAXN][MAXN];double Prim(int n)
{double ans=0;memset(vis,false,sizeof(vis));memset(lowc,0,sizeof(lowc));vis[0]=true;for(int i=1;i<n;i++)lowc[i]=cost[0][i];for(int i=1;i<n;i++){double minc=INF;int p=-1;for(int j=0;j<n;j++){if(!vis[j]&&minc>lowc[j]){minc=lowc[j];p=j;}}if(minc==INF)return -1;ans+=minc;vis[p]=true;for(int j=0;j<n;j++){if(!vis[j]&&lowc[j]>cost[p][j])lowc[j]=cost[p][j];}}return ans;
}void init(int n)
{for(int i=0;i<n;i++)for(int j=0;j<n;j++){if(i==j)cost[i][j]=0;elsecost[i][j]=cost[j][i]=INF;}
}int main()
{int n;while(scanf("%d",&n)==1){if(n==0)break;init(n);for(int i=0;i<n;i++){double a[109],b[109],c[109],r[109];scanf("%lf%lf%lf%lf",&a[i],&b[i],&c[i],&r[i]);for(int j=0;j<i;j++){double dist=sqrt((a[i]-a[j])*(a[i]-a[j])+(b[i]-b[j])*(b[i]-b[j])+(c[i]-c[j])*(c[i]-c[j]));if(dist<=r[i]+r[j])cost[i][j]=cost[j][i]=0;elsecost[i][j]=cost[j][i]=dist-(r[i]+r[j]);}}printf("%.3lf\n",Prim(n));}return 0;
}

D -  Constructing Roads 题目链接

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <iostream>
#include <stdlib.h>
using namespace std;const int INF=0x3f3f3f3f;
const int MAXN=109;
bool vis[MAXN];
int lowc[MAXN];
int cost[MAXN][MAXN];int Prim(int n)
{int ans=0;memset(vis,false,sizeof(vis));memset(lowc,0,sizeof(lowc));vis[0]=true;for(int i=1;i<n;i++)lowc[i]=cost[0][i];for(int i=1;i<n;i++){int minc=INF;int p=-1;for(int j=0;j<n;j++){if(!vis[j]&&minc>lowc[j]){minc=lowc[j];p=j;}}if(minc==INF)return -1;ans+=minc;vis[p]=true;for(int j=0;j<n;j++){if(!vis[j]&&lowc[j]>cost[p][j])lowc[j]=cost[p][j];}}return ans;
}void init(int n)
{for(int i=0;i<n;i++)for(int j=0;j<n;j++){if(i==j)cost[i][j]=0;elsecost[i][j]=cost[j][i]=INF;}
}int main()
{int n;scanf("%d",&n);for(int i=0;i<n;i++)for(int j=0;j<n;j++){int a;scanf("%d",&a);cost[i][j]=a;}int m;scanf("%d",&m);while(m--){int a,b;scanf("%d%d",&a,&b);cost[a-1][b-1]=cost[b-1][a-1]=0;}printf("%d\n",Prim(n));return 0;
}

E -  QS Network 题目链接

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <iostream>
#include <stdlib.h>
using namespace std;const int INF=0x3f3f3f3f;
const int MAXN=1009;
bool vis[MAXN];
int lowc[MAXN];
int pre[MAXN];
int Max[MAXN][MAXN];
bool used[MAXN][MAXN];int prim(int cost[][MAXN],int n)
{int ans=0;memset(vis,false,sizeof(vis));memset(Max,0,sizeof(Max));memset(used,false,sizeof(used));vis[0]=true;pre[0]=-1;for(int i=1;i<n;i++){lowc[i]=cost[0][i];pre[i]=0;}lowc[0]=0;for(int i=1;i<n;i++){int minc=INF;int p=-1;for(int j=0;j<n;j++){if(!vis[j]&&minc>lowc[j]){minc=lowc[j];p=j;}}if(minc==INF)return -1;ans+=minc;vis[p]=true;used[p][pre[p]]=used[pre[p]][p]=true;for(int j=0;j<n;j++){if(vis[j])Max[j][p]=Max[p][j]=max(Max[j][pre[p]],lowc[p]);if(!vis[j]&&lowc[j]>cost[p][j]){lowc[j]=cost[p][j];pre[j]=p;}}}return ans;
}int Prim(int cost[][MAXN],int n)
{double ans=0;memset(vis,false,sizeof(vis));memset(lowc,0,sizeof(lowc));vis[0]=true;for(int i=1;i<n;i++)lowc[i]=cost[0][i];for(int i=1;i<n;i++){int minc=INF;int p=-1;for(int j=0;j<n;j++){if(!vis[j]&&minc>lowc[j]){minc=lowc[j];p=j;}}if(minc==INF)return -1;ans+=minc;vis[p]=true;for(int j=0;j<n;j++){if(!vis[j]&&lowc[j]>cost[p][j])lowc[j]=cost[p][j];}}return ans;
}void init(int cost[][MAXN],int n)
{for(int i=0;i<n;i++)for(int j=0;j<n;j++){if(i==j)cost[i][j]=0;elsecost[i][j]=cost[j][i]=INF;}
}int ans;int smst(int cost[][MAXN],int n)
{int Min=INF;for(int i=0;i<n;i++)for(int j=i+1;j<n;j++){if(cost[i][j]!=INF&&!used[i][j]){Min=min(Min,ans+cost[i][j]-Max[i][j]);}}if(Min==INF)return -1;return Min;
}int cost[MAXN][MAXN];int main()
{//freopen("in.txt","r",stdin);//freopen("out.txt","w",stdout);int T,s[MAXN];scanf("%d",&T);while(T--){int n;scanf("%d",&n);init(cost,n);for(int i=0;i<n;i++)scanf("%d",&s[i]);for(int i=0;i<n;i++)for(int j=0;j<n;j++){int a;scanf("%d",&a);cost[i][j]=a+s[i]+s[j];}printf("%d\n",Prim(cost,n));}return 0;
}

I -  Agri-Net 题目链接

#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <string>
#include <math.h>
#include <stdlib.h>
#include <time.h>
using namespace std;const int INF=0x3f3f3f3f;
const int MAXN=109;
bool vis[MAXN];
int lowc[MAXN];
int cost[MAXN][MAXN];
int n;int Prim()
{int ans=0;memset(vis,0,sizeof(vis));vis[1]=true;for(int i=2;i<=n;i++){lowc[i]=cost[1][i];}for(int i=2;i<=n;i++){int minc=INF;int p=-1;for(int j=1;j<=n;j++){if(!vis[j]&&minc>lowc[j]){minc=lowc[j];p=j;}}if(minc==INF)return -1;ans+=minc;vis[p]=true;for(int j=1;j<=n;j++){if(!vis[j]&&lowc[j]>cost[p][j])lowc[j]=cost[p][j];}}return ans;
}int main()
{//freopen("in.txt","r",stdin);//freopen("out.txt","w",stdout);while(scanf("%d",&n)==1){for(int i=1;i<=n;i++)lowc[i]=i;for(int i=1;i<=n;i++)for(int j=1;j<=n;j++){scanf("%d",&cost[i][j]);}printf("%d\n",Prim());}return 0;
}

K -  The Unique MST 题目链接

此题错了5次。。

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <iostream>
#include <stdlib.h>
using namespace std;const int INF=0x3f3f3f3f;
const int MAXN=109;
bool vis[MAXN];
int lowc[MAXN];
int pre[MAXN];
int Max[MAXN][MAXN];
bool used[MAXN][MAXN];int prim(int cost[][MAXN],int n)
{int ans=0;memset(vis,false,sizeof(vis));memset(Max,0,sizeof(Max));memset(used,false,sizeof(used));vis[0]=true;pre[0]=-1;for(int i=1;i<n;i++){lowc[i]=cost[0][i];pre[i]=0;}lowc[0]=0;for(int i=1;i<n;i++){int minc=INF;int p=-1;for(int j=0;j<n;j++){if(!vis[j]&&minc>lowc[j]){minc=lowc[j];p=j;}}if(minc==INF)return -1;ans+=minc;vis[p]=true;used[p][pre[p]]=used[pre[p]][p]=true;for(int j=0;j<n;j++){if(vis[j])Max[j][p]=Max[p][j]=max(Max[j][pre[p]],lowc[p]);if(!vis[j]&&lowc[j]>cost[p][j]){lowc[j]=cost[p][j];pre[j]=p;}}}return ans;
}int Prim(int cost[][MAXN],int n)
{double ans=0;memset(vis,false,sizeof(vis));memset(lowc,0,sizeof(lowc));vis[0]=true;for(int i=1;i<n;i++)lowc[i]=cost[0][i];for(int i=1;i<n;i++){int minc=INF;int p=-1;for(int j=0;j<n;j++){if(!vis[j]&&minc>lowc[j]){minc=lowc[j];p=j;}}if(minc==INF)return -1;ans+=minc;vis[p]=true;for(int j=0;j<n;j++){if(!vis[j]&&lowc[j]>cost[p][j])lowc[j]=cost[p][j];}}return ans;
}void init(int cost[][MAXN],int n)
{for(int i=0;i<n;i++)for(int j=0;j<n;j++){if(i==j)cost[i][j]=0;elsecost[i][j]=cost[j][i]=INF;}
}int ans;int smst(int cost[][MAXN],int n)
{int Min=INF;for(int i=0;i<n;i++)for(int j=i+1;j<n;j++){if(cost[i][j]!=INF&&!used[i][j]){Min=min(Min,ans+cost[i][j]-Max[i][j]);}}if(Min==INF)return -1;return Min;
}int cost[MAXN][MAXN];int main()
{//freopen("in.txt","r",stdin);//freopen("out.txt","w",stdout);int T;scanf("%d",&T);while(T--){int n,m;scanf("%d%d",&n,&m);init(cost,n);while(m--){int a,b,c;scanf("%d%d%d",&a,&b,&c);cost[a-1][b-1]=cost[b-1][a-1]=c;}ans=prim(cost,n);if(ans==-1){printf("Not Unique!\n");continue;}if(ans==smst(cost,n)){printf("Not Unique!\n");}else{printf("%d\n",ans);}}return 0;
}

L -  还是畅通工程 题目链接

#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <string>
#include <math.h>
#include <stdlib.h>
#include <time.h>
using namespace std;const int INF=0x3f3f3f3f;
const int MAXN=109;
bool vis[MAXN];
int lowc[MAXN];
int cost[MAXN][MAXN];
int n;int Prim()
{int ans=0;memset(vis,0,sizeof(vis));vis[1]=true;for(int i=2;i<=n;i++){lowc[i]=cost[1][i];}for(int i=2;i<=n;i++){int minc=INF;int p=-1;for(int j=1;j<=n;j++){if(!vis[j]&&minc>lowc[j]){minc=lowc[j];p=j;}}if(minc==INF)return -1;ans+=minc;vis[p]=true;for(int j=1;j<=n;j++){if(!vis[j]&&lowc[j]>cost[p][j])lowc[j]=cost[p][j];}}return ans;
//  printf("%d\n",ans);
}int main()
{//freopen("in.txt","r",stdin);//freopen("out.txt","w",stdout);while(scanf("%d",&n)==1){if(n==0)break;for(int i=1;i<=n;i++)for(int j=1;j<=n;j++){if(i==j)cost[i][j]=0;elsecost[i][j]=INF;}for(int i=0;i<n*(n-1)/2;i++){int a,b,time;scanf("%d%d%d",&a,&b,&time);if(cost[a][b]>time)cost[a][b]=cost[b][a]=time;}printf("%d\n",Prim());}return 0;
}

M -  Jungle Roads 题目链接

#include <stdio.h>
#include <string.h>
#include <set>
#include <map>
#include <algorithm>
#include <math.h>
#include <iostream>
using namespace std;const int INF=0x3f3f3f3f;
const int MAXN=109;
bool vis[MAXN];
int lowc[MAXN];
int cost[109][109];int Prim(int n)
{int ans=0;memset(vis,0,sizeof(vis));vis[0]=true;for(int i=1;i<n;i++)lowc[i]=cost[0][i];for(int i=1;i<n;i++){int minc=INF;int p=-1;for(int j=0;j<n;j++){if(!vis[j]&&minc>lowc[j]){minc=lowc[j];p=j;}}if(minc==INF)return -1;ans+=minc;vis[p]=true;for(int j=0;j<n;j++){if(!vis[j]&&lowc[j]>cost[p][j])lowc[j]=cost[p][j];}}return ans;
}void init(int n)
{for(int i=0;i<n;i++)for(int j=0;j<n;j++){if(i==j)cost[i][j]=0;elsecost[i][j]=cost[j][i]=INF;}
}int main()
{int n,m,a;char c,d;while(scanf("%d",&n)==1){if(n==0)break;getchar();init(n);for(int i=0;i<n-1;i++){scanf("%c %d",&c,&m);if(m!=0)getchar();while(m--){if(m==0)scanf("%c %d",&d,&a);elsescanf("%c %d ",&d,&a);cost[c-'A'][d-'A']=cost[d-'A'][c-'A']=a;//  printf("%d %d \n",c-'A',d-'A');}getchar();}/*for(int i=0;i<n;i++){for(int j=0;j<n;j++){printf("%d ",cost[i][j]);}printf("\n");}*/printf("%d\n",Prim(n));}return 0;
}

N -  畅通工程再续 题目链接

#include <stdio.h>
#include <string.h>
#include <set>
#include <map>
#include <algorithm>
#include <math.h>
#include <iostream>
using namespace std;const double INF=0x3f3f3f3f;
const int MAXN=109;
bool vis[MAXN];
double lowc[MAXN];
double cost[109][109];struct node
{double x,y;
}s[109];double Prim(int n)
{double ans=0;memset(vis,false,sizeof(vis));vis[1]=true;for(int i=2;i<=n;i++)lowc[i]=cost[1][i];for(int i=2;i<=n;i++){double minc=INF;int p=-1;for(int j=1;j<=n;j++){if(!vis[j]&&minc>lowc[j]){minc=lowc[j];p=j;}}if(minc==INF)return -1;if(minc>1000||minc<10){return -1;}ans+=minc;vis[p]=true;for(int j=1;j<=n;j++){if(!vis[j]&&lowc[j]>cost[p][j])lowc[j]=cost[p][j];}}return ans;
}void init(int n)
{for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)cost[i][j]=cost[j][i]=INF;
}int main()
{int T;scanf("%d",&T);while(T--){int n;scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%lf%lf",&s[i].x,&s[i].y);}init(n);int k=0;for(int i=1;i<=n;i++){for(int j=i+1;j<=n;j++){double time=sqrt((s[i].x-s[j].x)*(s[i].x-s[j].x)+(s[i].y-s[j].y)*(s[i].y-s[j].y));if(cost[i][j]>time&&time<=1000&&time>=10)cost[i][j]=cost[j][i]=time;}}if(Prim(n)==-1)printf("oh!\n");else{printf("%.1lf\n",Prim(n)*100.0);}} return 0;
}

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

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

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

  2. [kuangbin带你飞]专题六-生成最小树

    先简单说一下,生成最小树一般常用两种算法,一种是prim另一种是kruskal,两种算法也各有利弊,比如说prim编程比较复杂一些而kruskal编程则相对容易一些,但是时间复杂度却差了些. prim ...

  3. kuangbin带你飞专题合集

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

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

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

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

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

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

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

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

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

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

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

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

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

  10. [kuangbin带你飞]专题1

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

最新文章

  1. 如何使用 autofs 挂载 NFS 共享
  2. 数据仓库专题(6)-数据仓库、主题域、主题概念与定义
  3. invalid use of incomplete type struct 或者是class的解决办法
  4. springmvcget中文乱码_解决SpringMVC Controller 接收页面传递的中文参数出现乱码的问题...
  5. 使用C与C++混合编程封装UDP协议
  6. 第三节:创建一个Vue实例,超简单
  7. [uva816]AbbottsRevenge Abbott的复仇(经典迷宫BFS)
  8. 实验一 命令解释程序的编写
  9. HDU2563 统计问题【递推+打表】
  10. 【GDOI模拟】屏保
  11. python编写程序掷骰子游戏规则_通过构建一个简单的掷骰子游戏去学习怎么用Python编程...
  12. HTML+CSS登陆界面实例
  13. Win10怎样禁用触控板
  14. 愿世间所有美好都恰逢其时
  15. 利用Chrome浏览器的开发者工具控制网速
  16. get_sequencer的用法总结
  17. 短信验证码接口测试案例
  18. HotSpot GC及参数设置
  19. C++ 关于指针变量所占内存空间大小的问题
  20. shell编程之sort、uniq、tr

热门文章

  1. Axure知识点:如何制作输入关键词模糊搜索功能?
  2. cpu flags 一致性检查
  3. 车轱辘APP提交到各应用市场的心得~
  4. ​电子投票系统与区块链
  5. 现在1分、2分、5分硬币的收藏价格如何呢?
  6. 记dubbo consumer服务因订阅其他有异常的服务导致超时的问题
  7. LeetCode-----第113题-----路径总和 II
  8. 想要成为大牛应该做到以下几点
  9. 2019顺网无盘服务器配置,顺网无盘如何不安装网维客户端上传系统到无盘服务器...
  10. android禁用传感器,Android 系统 强制 禁用 距离传感器 方法