[HDOJ1863]畅通工程
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1863
新学习了prim算法,把之前的dijkstra改了改,d数组用来存上一个距离当前节点最近的长度,而不是源点到当前最近的长度就可以了。初始化d为inf,如果条件不够那和算出来必定>inf(没考虑溢出,因为我定义的inf并不是很大)(题目小坑,把n和m输入顺序反了一下。)
1 #pragma warning(disable:4996) 2 3 4 #include <algorithm> 5 #include <iostream> 6 #include <iomanip> 7 #include <cstring> 8 #include <climits> 9 #include <complex> 10 #include <fstream> 11 #include <cassert> 12 #include <cstdio> 13 #include <bitset> 14 #include <vector> 15 #include <deque> 16 #include <queue> 17 #include <stack> 18 #include <ctime> 19 #include <set> 20 #include <map> 21 #include <cmath> 22 23 using namespace std; 24 25 const int maxn = 105; 26 const int inf = 0xffffff; 27 int d[maxn]; 28 int G[maxn][maxn]; 29 int vis[maxn]; 30 int n, m; 31 32 void init() { 33 memset(vis, 0, sizeof(vis)); 34 for(int i = 0; i <= n; i++) { 35 d[i] = inf; 36 for(int j = 0; j <= n; j++) { 37 G[i][j] = G[j][i] = inf; 38 } 39 G[i][i] = 0; 40 } 41 } 42 43 int prim(int start) { 44 d[start] = 0; 45 for(int i = 1; i <= n; i++) { 46 int u = -1; 47 for(int j = 1; j <= n; j++) { 48 if(!vis[j]) { 49 if(u == -1 || d[j] < d[u]) { 50 u = j; 51 } 52 } 53 } 54 vis[u] = 1; 55 for(int j = 1; j <= n; j++) { 56 if(!vis[j]) { 57 d[j] = min(G[u][j], d[j]); 58 } 59 } 60 } 61 int sp = 0; 62 for(int i = 1; i <= n; i++) { 63 sp += d[i]; 64 } 65 return sp; 66 } 67 68 int main() { 69 // freopen("in", "r", stdin); 70 int u, v, w; 71 while(~scanf("%d %d", &m, &n) && m) { 72 init(); 73 while(m--) { 74 scanf("%d %d %d", &u, &v, &w); 75 if(w < G[u][v]) { 76 G[u][v] = G[v][u] = w; 77 } 78 } 79 int len = prim(1); 80 if(len > inf) puts("?"); 81 else printf("%d\n", len); 82 } 83 }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core GC计划阶段(plan_phase)底层原理浅谈
· .NET开发智能桌面机器人:用.NET IoT库编写驱动控制两个屏幕
· 用纯.NET开发并制作一个智能桌面机器人:从.NET IoT入门开始
· 一个超经典 WinForm,WPF 卡死问题的终极反思
· ASP.NET Core - 日志记录系统(二)
· 支付宝事故这事儿,凭什么又是程序员背锅?有没有可能是这样的...
· 在线客服系统 QPS 突破 240/秒,连接数突破 4000,日请求数接近1000万次,.NET 多
· C# 开发工具Visual Studio 介绍
· 在 Windows 10 上实现免密码 SSH 登录
· C#中如何使用异步编程