北大暑期学校-图论1acm-icpc mst_第1页
北大暑期学校-图论1acm-icpc mst_第2页
北大暑期学校-图论1acm-icpc mst_第3页
北大暑期学校-图论1acm-icpc mst_第4页
北大暑期学校-图论1acm-icpc mst_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

暑期课《ACM/ICPC竞赛训练信息 图的生成 V(G’)=V(G);E(G’)一棵含有n个点的生成树,必含有n-1条边最小生成对于通网(连通带权图,假定每条具最小的生成树称为最小生成最小生成 生成 最 Prim算所有边中,找一条最短边,设为(vi,vj),其中vi∈U,vj∈V-U,并把该边(vivj)和顶点vj分别并入T的边集TEPrim算法实开始所有Dist[i无穷大T 的不在T中的点Vi,将其加入TDist[j]=关键问每次如何从连接T中和T到一条最短O(V2),V为顶点个数40494016prioirty_queuePrim+堆完成#include<iostream> #include<vector>#include<queue>constintINFINITE=1<<30;structEdge{intv;//边端点,另一端Edge(intv_=0,intw_=INFINITE):v(v_),w(w_){}booloperator<(constEdge&e)const{}vector<vector<Edge>>G(110);//图的邻接//G是邻接表,n是顶点数目,返回值是最小生成树权值{intEdgevector<intvDist(n);//各顶点到已经建好的那部分树的距离vector<int>vUsed(n);//标记顶点是否已经被加入最小生成树intnDoneNum=0;//已经被加入最小生成树的顶点数目for(i=0;i<n;i++)vUsed[i]=0;}pq.push(Edge(0,0));//开始只有顶点0,它到最小生成树距离xDist=pq.top(); }while(vUsed[xDist.v]==1&&! if(vUsed[xDist.v]==0){ nTotalW+=xDist.w; vUsed[xDist.v]=1;nDoneNum++;for(i=0;i<G[xDist.v].size();i++){//更新新加入点的邻点intk=if(vUsed[k]==0)if(vDist[k]>w){vDist[k]=w;}}}}}if(nDoneNum<nreturn1//图不连通returnnTotalW;}

行pq.push(Edge(k,w故复杂度int{ intN; while(cin>>N){for(inti=0;i<N;for(inti=0;i<N;++i)for(intj=0;j<N;++j)intcin>>w;}}}Kruskal算关键问Kruskal算法完成//byGuo #include<iostream>#include<vector>structEdge{ints,e,w;//起点,终点,权Edge(){}booloperator<(constEdge&e1)const{returnw<e1.w;}vector<int>parent;intGetRoot(int{if(parent[a]==returnreturnparent[a];}voidMerge(inta,int{intp1=GetRoot(a);intp2=GetRoot(b);if(p1==p2)parent[p2]=p1;}int intwhile(cin>>N) for(inti=0;i<N;++i) for(inti=0;i<N;++i)for(intj=0;j<N;++j){intw;cin>>w;}intdone=0; inttotalLen=0;for(inti=0;i<edges.size();++i)}if(done==N–1)}cout<<totalLen<<}}算法:Kruskal和使用数据结构:并查适用于稀疏使用数据结时间复杂度:O(ElogV)或 那契堆适用于密集若不用堆则时间复杂度为例题POJ2349Arctic 过d,否则 例题POJ2349Arctic已知所有村庄的坐标(x,y),设备的k。问:如何分配设备,才能使各个村庄d的最小值。 数据规模:0kn(FromWaterlooUniversityd已知,把所有铺设线路的村庄连接起来,构成一个图。需要设备的台数那么,只需找到一个最小的d,使得连通支的个数小于等于设备的数目。答把整个问题看做一个完全图,村庄就是点,只需在该图上求最小生成树,d的最小值即为第K长边!后,正好将原树分成了k个连通分支,在每 为什么d不可能比第k长边更将边<a,b>去掉后,树就分成了两个部分T1和T2 a1,a

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论