simple暑期课ACM ICPC竞赛训练_第1页
simple暑期课ACM ICPC竞赛训练_第2页
simple暑期课ACM ICPC竞赛训练_第3页
simple暑期课ACM ICPC竞赛训练_第4页
simple暑期课ACM ICPC竞赛训练_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

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

文档简介

1、最小生成树(MST)信息学院程序设计实习(实验班、最小生成树(MST)信息学院程序设计实习(实验班、在V(G)=V(G);E(G)具无向连通图的边的集无向连通图的边的集无回连接所有的所有边的权值之和最假设假设G=(V,E)是一个具有n个顶点的连通网T=(U,TE)是G的最小生成树,U,TE初值均为空集viU,vj V-U,并把该边(vi, vj)和顶点vj分别并入T 小生成树每次如何从连接T中和T到一条最短1如果用邻接矩每次如何从连接T中和T到一条最短1如果用邻接矩阵存放图,而且选取最短边的O(V2), V 为顶点个数不加堆的Prim 算法适用于密集图,加堆的于稀疏POJ1258 输入图的邻P

2、OJ1258 输入图的邻接矩阵,求最小生成树的总权(多组数据输入样例40440980输出样例prioirty_queuePrim/by Guo Wei #include #include #include #include usingINFINITE=prioirty_queuePrim/by Guo Wei #include #include #include #include usingINFINITE=1structv/w; /边权v_=w_=INFINITE):v(v_),w(w_)booloperator(constEdge&e)returnwe.w; /vectorvectorEd

3、geG(110)/HeapPrim(const vectorvector & /G是邻HeapPrim(const vectorvector & /G是邻接表,n是顶点数目,返回值是最小生成树权值Edge xDist(0,0); priority_queue pq; vUsed(n);/标记顶点是否已经被加入最小生nDoneNum0/已经被加入最小生成树的顶点数目 for( i = 0;i n;i + ) vUsedi=vDisti=nDoneNum=while(nDoneNumn&!pq.empty()while(nDoneNumn&!pq.empty() do xDist=while(vU

4、sedxDist.v=1&!pq.empty(); if( vUsedxDist.v = 0 ) nTotalW += vUsedxDist.v=nDoneNum for(i=0;i w ) vDistk = w; if(nDoneNumN)i=0;iwhile(cinN)i=0;iN;i =0;iN;j=0;j w; coutHeapPrim(G,N)将图G入TE-Kruskal算法完成/by Guo Wei #include #include #include struct Edgeww):s(ss),e(ee),w(ww) Kruskal算法完成/by Guo Wei #include

5、#include #include struct Edgeww):s(ss),e(ee),w(ww) Edge()booloperator(constEdge&e1)const return w N)i = 0;i N; +i) i = 0; i N)i = 0;i N; +i) i = 0; i N; +i)j=0;j w; done= i=0;iedges.size();+i)if( GetRoot(edgesi.s) != GetRoot(edgesi.e) if(done=N 1) couttotalLen算法:KruskalKruskal:将算法:KruskalKruskal:将所有

6、边从小到大加入,在此过程Prim:从任一节点出发,不断扩时间复杂度:O(ElogV) 或POJ2349ArcticPOJ2349Arcticd, d的设备(成本POJ2349ArcticPOJ2349Arctic已知所有村庄的坐标xy,数量k 。之间能直接或间接的通讯,并且d的值最小?求出d 的最小值。数据规模:0kn去掉后,树就分成了两个部分1和要使1和2能够通讯,必须在1中找一点和2中的点q相连,若边的长度小于,则在T上用替换就能得到更小的生成树,矛盾。因此找不到长度小于,b的。对任何比第长边短的边,同理也不可能找到替代的边。因此d不可能更小最小生成树可能最小生成树可能不止一棵,为什么第k

7、长边长度一定相同?因为以下结论a1, a2 . an两者若不同,则必然存在一个最小的i,ai但是对于T中任何一条不在T中的权为的边,如果将其从T去掉,则T被分成A,B两TA,要么T的权值可以变得更小,要么T的权值可以变得更小,这和TT2是最小生成树矛盾。对T中每个权值为的边,都可以在T中找到一个权值相同且不在T的边与其对应,而这些边由于是连接不同部分的,所以不可能相同,因此,在T中也应该有m条权例题4:POJ1679The例题4:POJ1679TheUnique, 设G=(V , E , )是连通的无向图,T是图G的足不存在树TTT(T) T1 - T2-Tn 所谓的变换是,每次把Ti中的某条

8、边换成中的一条边而且树T(i+1)的权小于等于Ti的在Ti中任取在Ti中任取一条不在T中的边uv和Tuv连结A和。显然uv的权不比uv(否则,uv就应该在T中)。特别地:取T0为任一棵次小生成树,T(n-1) 也会是次小生成树且跟T差一条边. 定理1得证(每利用该定理,可以得到O(V2)的算利用该定理,可以得到O(V2)的算法求先用prim求出最小生成树T。在prim的同时用一个矩阵在T意两点u,v这是很容易做到的,因为im是每次增加一个结点s,这是很容易做到的,因为im是每次增加一个结点s,W中所有点到s的路中的最大边权值设u 属于W,且 s是被连接到W中的v点的则Max_valus=Max

9、(Max_valvs,用时O(V2) 枚举所有不在 枚举所有不在T中的边uv,加入边uv则必然用时O(E)2011ACM/ICPCProblemA.Qin2011ACM/ICPCProblemA.QinShiHuangsNationalRoad条件:A/B最大。其中A是e0解题思路:先解题思路:先求一棵最小生成树,求的过程中,每加一个点,已经在树上的所有点到该点的路径(上的路径)上的最长边的权值。然后枚举权值要变成0DesertDesert题意一个图, 每条边有花费C和长度l 两个非负参求一个生成树,使得花费之和与长度之和的比最r=(C1+C2+Cn-1)/(l1+l2+ln-r(min) =r(min) =r(min)* l1 -c1+r(min)* ln- cn-r(min),则r(min)对应的取法,就能r=x时不等式不成立能很快判断能很快判断上式是否对于每一个假定的何生成树取法都成立,等式左边的值随着r增加增加,随着r减少而减少。所以可以用二分查以r*以r*li ci 为每条边的权值,重新构图,考虑这r最大生成树最

温馨提示

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

评论

0/150

提交评论