为什么还是不对呢?

P3366 【模板】最小生成树

没看出来什么显著的问题 但是有个建议:`if (i && dist[t]==INF) return -1;`这段代码不要返回-1,最好返回INF 以下是我的AC代码,我对照过了,你的貌似没有什么大问题 ``` #include <bits/stdc++.h> using namespace std; const int N = 5100,INF = 0x3f3f3f3f; int n,m; int g[N][N]; int dist[N]; bool st[N]; int prim() { //初始化最小距离 memset(dist,0x3f,sizeof(dist)); 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; //假如不为第一个点并且最小距离为INF,说明这个点不连通任何一个点,那么没有最小生成树 if(i && dist[t] == INF) return INF; //先更新res if(i) res+=dist[t]; //更新其他点的最小距离 for(int j=1;j<=n;j++) dist[j] = min(dist[j],g[t][j]); //把当前点加入集合 st[t] = true; } return res; } int main() { cin >> n >> m; memset(g,0x3f,sizeof(g)); while(m--) { int a,b,c; cin >> a >> b >> c; //重边无向图的处理方式 g[a][b] = g[b][a] = min(g[a][b],c); } int t = prim(); if(t == INF) cout << "orz"; else cout << t; return 0; } ```
by qianmo23535 @ 2023-04-01 22:50:34


注意 是orz不是org
by Joker__King @ 2023-04-16 10:19:41


|