那有没有别的可以解决zoj1626的AC代码
时间: 2024-02-13 21:00:42 浏览: 81
zoj3607.rar_zoj贪心
zoj1626是一道经典的题目,也是一道比较难的题目。如果你已经尝试了多种方法都无法通过,可以考虑参考其他人的AC代码进行学习和借鉴。以下是一份AC代码作为参考:
```c++
#include<bits/stdc++.h>
using namespace std;
const int N=5e3+5;
int n,m;
struct node{
int u,v,w;
}e[N*N/2];
bool cmp(node a,node b){
return a.w<b.w;
}
int fa[N];
int find(int x){
if(fa[x]==x)return x;
return fa[x]=find(fa[x]);
}
int kruskal(){
sort(e,e+m,cmp);
for(int i=1;i<=n;i++)fa[i]=i;
int cnt=0,ans=0;
for(int i=0;i<m;i++){
int u=e[i].u,v=e[i].v,w=e[i].w;
int fa_u=find(u),fa_v=find(v);
if(fa_u!=fa_v){
fa[fa_u]=fa_v;
cnt++;
ans+=w;
if(cnt==n-1)break;
}
}
return ans;
}
int main(){
while(cin>>n){
m=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
int w;
cin>>w;
if(i<j)e[m++]=(node){i,j,w};
}
}
cout<<kruskal()<<endl;
}
return 0;
}
```
这份代码使用Kruskal算法求解最小生成树,时间复杂度为 $O(m\log m)$,其中 $m$ 为边数,可以通过此题。
阅读全文