图论算法总结与图论建模.pptVIP

  • 27
  • 1
  • 约2.34万字
  • 约 121页
  • 2018-11-06 发布于浙江
  • 举报
最小生成树可能不止一棵,为什么第k长边长度一定相同?因为有以下结论: 一个图的两棵最小生成树,边的权值序列排序后结果相同 证明:假设某个最小生成树T1的边权从小到大排序后的序列为:a1, a2 …. an 某个最小生成树T2的边权从小到大排序后的序列为:b1,b2…bn 两者若不同,则必然存在一个最小的i,使得ai bi 假设T2中有m条边的权为bi,那么,T1中最多只有m-1条边的权和bi相同。 Arctic Network POJ2349 但是对于T2中任何一条不在T1中的权为bi的边,如果将其从T2去掉,则T2被分成A,B两个部分。那么在T1中连接A,B这两个部分的边,必然权值是等于bi的,否则经过替换,要么T1的权值可以变得更小,要么T2的权值可以变得更小,这和T1,T2是最小生成树矛盾。对T2中每个权值为bi的边,都可以在T1中找到一个权值相同且不在T2的边与其对应,而这些边由于是连接不同部分的,所以不可能相同,因此,在T1中也应该有m条权值为bi的边,这和T1中最多m-1条权值为bi的边矛盾。因此,不存在i,使得的aibi,即两个边权序列应该相同。 Arctic Network POJ2349 你现在有一个集合,一开始集合为空,每次你会得到一对个质数,然后如果集合中存在若干个数对,将这些数对和你得到的数对中所有的数乘起来是完全平方数,那么,就将这个数扔掉,否则就将这个数加入集合。最后输出扔掉的数的个数。(由于素数本身是什么并不重要,题中就只给出了素数的编号,编号相同的素数即为同一个素数) Square dance(SPOJ131) Square dance(SPOJ131) Sample Input: 6 7 1 2 3 5 2 4 1 4 3 5 1 6 4 6 Sample output: 3 素数对数=100000 素数的编号=100000 考虑怎样的一些数对才能够构成完全平方数,应该是每个数都出现了偶数次。 如果把所有的数抽象成点呢?把数对抽象成边呢?那会构成一个什么呢? 生成树! Square dance(SPOJ131) (1,2) (3,2) (3,1) 1 3 2 实际上题目冗长的描述仅仅是讲了一棵生成树的生长过程。每次添加进来一个数对,实际上就是添一条边,然后如果这条边会与已有的边构成一条回路,则要扔掉这条边,否则就加入这条边,这与Kruskal算法惊人地相似! 因此,我们只需要模拟一下Kruskal算法的实现流程,就能轻松地解决这一问题了。 一个巧妙的变形,往往是解决问题的关键所在! Square dance(SPOJ131) A国有n座城市,编号从1到n,城市之间有m条双向道路。每一条道路对车辆都有重量限制,简称限重。现在有q辆货车在运输货物,司机们想知道每辆车在不超过车辆限重的情况下,最多能运多重的货物。 输入文件第一行有两个用一个空格隔开的整数n,m,表示A国有n座城市和m条道路。 NOIP2013Day1T3货车运输 接下来m行每行3个整数x、y、z,每两个整数之间用一个空格隔开,表示从x号城市到y号城市有一条限重为z的道路。 注意:x不等于y,两座城市之间可能有多条道路。 接下来一行有一个整数q,表示有q辆货车需要运货。 接下来q行,每行两个整数x、y,之间用一个空格隔开,表示一辆货车需要从x城市运输货物到y城市,注意:x不等于y。 NOIP2013Day1T3货车运输 输出共有q行,每行一个整数,表示对于每一辆货车,它的最大载重是多少。如果货车不能到达目的地,输出-1。 Sample Input Sample Output NOIP2013Day1T3货车运输 4 3 1 2 4 2 3 3 3 1 1 3 1 3 1 4 1 3 3 -1 3 大致思路: 对于每个连通块,只保留这个连通块的最大生成树上的边 然后对于每个询问,如果x,y联通,则输出x到y所经过的最大生成树上的边的最小值,否则输出-1 对于如何求出这个最小值这需要用到倍增算法,有兴趣的同学可以课后自己去学习 NOIP2013Day1T3货车运输 THANK YOU FOR LISTENING 约束图: 结点是变量, 一个约束对应一条弧, 若有弧(u, v), 则得到xu后, 有xv =

文档评论(0)

1亿VIP精品文档

相关文档