最小生成树prim+邻接表优化
来源:互联网 发布:数据清单内容分类汇总 编辑:程序博客网 时间:2024/05/21 05:06
#include <iostream> #include <algorithm> #include <string.h> #include <queue> using namespace std; const int inf=0x3f3f3f3f;;const int maxx=1e3+100;;const int maxn=2e6+10;typedef long long ll;int m,n,q,ans,sum; int dis[maxx];int sto[maxx];int head[2*maxn];bool vis[maxx]; int a[maxx][maxx];struct point{ int to; int next; int val; bool operator < (const point &a) const{return val>a.val;}}; point pt[2*maxn]; void add(int u,int v,int val){ pt[q].next=head[u]; pt[q].to=v; pt[q].val=val; head[u]=q++;} void prim(int st) { priority_queue<point>q; point t1,t2;int w,v; memset(dis,inf,sizeof(dis)); memset(vis,false,sizeof(vis)); for (int i=head[st];i!=-1;i=pt[i].next) { int v=pt[i].val; if (dis[pt[i].to]>v) { dis[pt[i].to]=v; t1.to=pt[i].to; t1.val=v; q.push(t1); }}vis[st]=true;ans=1;sum=0;while (!q.empty()){point t=q.top();q.pop();int v=t.to;if (vis[v])continue;vis[v]=true;sum+=dis[v];ans++;for (int i=head[v];i!=-1;i=pt[i].next){ int u=pt[i].to; if (!vis[u]&&pt[i].val<dis[u]) { dis[u]=pt[i].val; t2.to=u; t2.val=pt[i].val; q.push(t2); }}}}int main(){int k,u,v,val,st;cin>>m>>n>>k;memset(head,-1,sizeof(head));q=1;for (int i=0;i<m;i++){cin>>u>>v>>val;add(u,v,val);add(v,u,val);st=u;} prim(st); if (ans==n) cout<<sum<<endl; else cout<<"don't exit "<<endl; //没有return 0;}
阅读全文
0 0
- 最小生成树prim+邻接表优化
- 最小生成树Prim算法实现(采用邻接表存储)C++实现
- prim算法构造最小生成树(邻接表和数组两种存储方式实现)
- 图论 邻接链表存储 BFS DFS 拓扑排序 最小生成树 KRUSKAL PRIM
- 图基本算法 最小生成树 Prim算法(邻接表/邻接矩阵+优先队列STL)
- 最小生成树Prim算法实现(采用邻接表存储)C++实现
- 最小生成树Prim算法 堆优化
- 【模板】Prim+堆优化 最小生成树
- 最小生成树模板(prim+kruskal+prim的优化)
- Prim最小生成树
- 最小生成树 prim
- 最小生成树 Prim
- 最小生成树-Prim
- Prim最小生成树
- 最小生成树 Prim
- prim最小生成树
- 最小生成树prim
- 最小生成树 prim
- windwos下编写php扩展的一些注意事项
- VS2015 C++快捷键
- 1 JavaScript前言
- 脉象
- scikit-learn 中文文档-聚类-无监督学习|ApacheCN
- 最小生成树prim+邻接表优化
- selenium访问谷歌浏览器
- 内部类
- 带你了解Workday的前生今世(二)
- 数据结构之堆
- HDU 2037 今年暑假不AC
- 动态代理
- Lua元表的定义和使用
- HTML name、id、class 的区别