题目链接
22NYIST最小生成树专题 [Cloned] - Virtual Judge (csgrandeur.cn)
一些话
输出结果全为0,检查了数据正常读入后,发现初始化数组把st写成了dist,导致全变0
流程
读题找n,m和边,再套模板
套路
ac代码
#include <iostream> #include <cstring> using namespace std; const int N = 110; int g[N][N],dist[N]; bool st[N]; int n,m; int prim(){ memset(dist,0x3f,sizeof dist); memset(st,false,sizeof st);//输出结果全为0,检查了数据正常读入后,发现此处初始化数组写成了dist,导致全变0 int res = 0; for(int i = 0;i < n;i++){ int t = -1; for(int j = 1;j <= n;j++){ if(!st[j] && (t == -1 || dist[j] < dist[t])) t = j; } if(i) res += dist[t]; st[t] = true; for(int j = 1;j <= n;j++){ dist[j] = min(dist[j],g[t][j]); } } return res; } int main(){ while(cin >> n && n){ memset(g,0x3f,sizeof g); cin >> m; for(int i = 1;i <= m;i++){ int a,b,w; cin >> a >> b >> w; g[a][b] = g[b][a] = min(g[a][b],w); // cout << a << " " << b << ' ' << g[a][b] << endl; } int t = prim(); cout << t << endl; } return 0; }