2 solutions
-
0
最小生成树--prim算法
#include<bits/stdc++.h> using namespace std; typedef long long ll; const ll N=1010; ll n,m; ll ret; ll dist[N]; bool st[N]; vector<pair<ll,ll>>edges[N]; void prim() { memset(dist,0x3f3f,sizeof dist); dist[1]=0; for(int i=1;i<=n;i++) { ll t=0; for(int j=1;j<=n;j++) { if(dist[j]<dist[t] && !st[j]) { t=j; } } st[t]=true; ret+=dist[t]; for(auto u:edges[t]) { ll v=u.first; ll w=u.second; dist[v]=min(dist[v],dist[t]+w); } } } int main() { ios::sync_with_stdio(false); cin.tie(0); cin>>n>>m; for(ll i=1;i<=m;i++) { int u,v,w; cin>>u>>v>>w; edges[u].push_back({v,w}); edges[v].push_back({u,w}); } prim(); cout<<ret<<"\n"; return 0; }//ysh牛逼 //ysh牛逼 //ysh牛逼 //ysh牛逼 //ysh牛逼 //ysh牛逼 //ysh牛逼
Information
- ID
- 23
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 5
- Tags
- # Submissions
- 7
- Accepted
- 4
- Uploaded By