社区讨论
大佬救命!84!
P1194买礼物参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @lru05i0c
- 此快照首次捕获于
- 2024/01/26 10:06 2 年前
- 此快照最后确认于
- 2024/01/26 12:53 2 年前
用prim做的,最后一个测试点错了
CPP#include<bits/stdc++.h>
#define inf INT_MAX
using namespace std;
long long n,t,g[555][555],d[5555],ans,vis[5555];
void prim(int s){
for(int i=2;i<=n;i++) d[i]=inf;
d[s]=g[s][s];
for(int i=1;i<=n;i++){
int u,mmin=inf;
for(int j=1;j<=n;j++){
if(!vis[j]&&d[j]<mmin){
mmin=d[j];
u=j;
}
}
vis[u]=1;
ans+=mmin;
for(int j=1;j<=n;j++) if(!vis[j]&&d[j]>g[u][j]) d[j]=g[u][j];
}
}
int main(){
cin>>t>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>g[i][j];
if(i==j) g[i][j]=t;
if(g[i][j]==0) g[i][j]=g[j][i]=t;
}
}
prim(1);
cout<<ans;
return 0;
}
回复
共 1 条回复,欢迎继续交流。
正在加载回复...