2011.07.14
来源:互联网 发布:全知之眼的意义 编辑:程序博客网 时间:2024/05/01 00:50
Prim+优先队列 模板:
#include<fstream>#include<cstring>#include<algorithm>#include<queue>#define MAXE 10000#define MAXV 150using namespace std;const long long INF=(long long)1<<63-1;typedef pair<long long,long long> pii;long long t,m,n,V,E,pos=0,head[MAXV];long long ans,d[MAXV];struct Edge{ long long w,next,v;}node[MAXE*2];//无向图邻接表void add(long long u,long long v,long long w){ if(u==v) return; //如果指向自己的边则舍去 node[pos].v=v; node[pos].w=w; node[pos].next=head[u]; head[u]=pos++;}//S为起点标号void prim(long long b){ bool done[MAXV]; memset(done,0,sizeof(done)); priority_queue<pii,vector<pii>,greater<pii> > q; q.push(make_pair(d[b],b)); while(!q.empty()){ pii u=q.top();q.pop(); long long x=u.second; done[x]=true; for(long long i=head[x];i!=-1;i=node[i].next) //松弛操作 if(!done[node[i].v] && d[node[i].v]>node[i].w){ d[node[i].v]=node[i].w; q.push(make_pair(d[node[i].v],node[i].v)); } }}ifstream cin("in");ofstream cout("out");int main(){ long long t,g[MAXV][MAXV]; while(cin>>V){ pos=1; memset(head,-1,sizeof(head)); for(long long i=1;i<=V;i++)for(long long j=1;j<=V;j++){ cin>>g[i][j]; add(i,j,g[i][j]); } for(long long i=1;i<=V;i++) d[i]=INF; d[1]=0; prim(1); for(long long i=1;i<=V;i++) ans+=d[i]; cout<<ans<<endl; ans=0; } return 0;}
- 2011.07.14
- UDP vc++ 2011.07.14
- (2011.07.14) 类的基本应用实例。
- 今天是最耻辱的一天---2011.07.14
- 2011.07.09
- 2011.07.11
- 2011.07.15
- 2011.07.16
- 2011.07.17
- 2011.07.18
- 2011.07.19
- 2011.07.20
- 2011.07.21
- 2011.07.22
- 2011.07.23
- 2011.07.24
- 2011.07.25
- 2011.07.26
- 一个五年程序员的学习观
- javascript货币数字添加逗号
- 《诗盗·甘草林木》
- [转]Android Activity和Intent机制学习笔记
- 绕死你不偿命的UNICODE、_UNICODE、__TEXT、__T、_T、_TEXT、TEXT宏
- 2011.07.14
- 通过HttpWebRequest分别向服务器发送GET或POST请求
- 100行Java代码构建一个线程池
- oracle sql语句性能优化
- HttpWebRequest
- 第一章 JAVA简介
- 数字识别--图像预处理之准备(归一化)
- SATA接口笔记本安装Windows7+Windows XP+Windows service 2003+Ubuntu
- 深入探讨Java的类加载机制