最小生成树prim+邻接表优化
2017-11-29 22:14
316 查看
#include <iostream> #include <algorithm> #include <string 4000 .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; }
相关文章推荐
- 最小生成树--prim+优先队列优化模板
- 洛谷3366 最小生成树(Prim + 堆优化)
- 【模板】Prim+堆优化 最小生成树
- HDU1102 - Constructing Roads 用优先队列优化Prim最小生成树
- Hihocoder 之 #1097 : 最小生成树一·Prim算法 (用vector二维 模拟邻接表,进行prim()生成树算法, *【模板】)
- 邻接表c源码(构造邻接矩阵,深度优先遍历,广度优先遍历,最小生成树prim,kruskal算法)
- 最小生成树模板(prim+kruskal+prim的优化)
- 最小生成树---prim模板(二叉堆优化)
- prim 求最小生成树(邻接表)
- hiho一下 第二十九周 最小生成树三·堆优化的Prim算法【14年寒假弄了好长时间没搞懂的prim优化:prim算法+堆优化 】
- JAVA实践优化Prim最小生成树算法
- 求最小生成树(暴力法,prim,prim的堆优化,kruskal)
- 最小生成树之prim模板题
- hdu 1102 Constructing Roads(最小生成树prim)
- 1078 最小生成树 prim
- POJ 1258:Agri-Net:典型prim最小生成树(3)
- JAVA-prim 最小生成树
- hdu 3371 最小生成树 prim
- PoJ 2253 Prim 最小生成树
- 最小生成树-Prim