图论模型的构建精.ppt





《图论模型的构建精.ppt》由会员分享,可在线阅读,更多相关《图论模型的构建精.ppt(47页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、图论模型的构建第1页,本讲稿共47页NOIP若干图论的考题Core(2007)Core(2007):图的多源最短路算法及其简单处理图的多源最短路算法及其简单处理双栈排序双栈排序(2008):栈的应用栈的应用+二分图的搜索二分图的搜索最优贸易最优贸易(2009):基本图论基本图论第2页,本讲稿共47页问题:求网线线序问题:求网线线序网线从机房连接到办公室在机房,所有网线从左到右编号为1,2,3,N 给出每两条线是否交叉的信息,请计算办公室内从左到右各条线的编号 第3页,本讲稿共47页选址问题选址问题现准备现准备在在n 个个居民点居民点v1,v2,vn中设置一银行中设置一银行.问设在哪个点问设在哪
2、个点,可使最大服务距离最小可使最大服务距离最小?若设置两若设置两个银行个银行,问设在哪两个点问设在哪两个点?模型假设模型假设 假设各假设各个个居民点都有条件设置银居民点都有条件设置银行行,并有路相连并有路相连,且路长已知且路长已知.第4页,本讲稿共47页模型建立与求解模型建立与求解用用Floyd算法求出任意两算法求出任意两个个居民点居民点vi,vj 之间的最短距离之间的最短距离,并用并用dij 表示表示.设置一个银行设置一个银行,银行设银行设在在vi 点点的最大服务距离为的最大服务距离为求求k,使使 即若设置一个银行即若设置一个银行,则银行设在则银行设在vk 点点,可使最大服务距离最小可使最大
3、服务距离最小.设置两个银行设置两个银行,假设银行设假设银行设在在vs,vt 点点使最大服务距离最小使最大服务距离最小.记记则则s,t 满足:满足:进一步进一步,若设置多个银行呢?若设置多个银行呢?第5页,本讲稿共47页求求k,使使 即若设置一个银行即若设置一个银行,则银行设在则银行设在vk 点点,可使最大服可使最大服务距离最小务距离最小.设置两个银行设置两个银行,假设银行设假设银行设在在vs,vt 点点使最大使最大服务距离最小服务距离最小.记记则则s,t 满足:满足:进一步进一步,若设置多个银行呢?若设置多个银行呢?第6页,本讲稿共47页最优贸易最优贸易某国有某国有M个城市个城市N条道路,任意
4、两个城市有道路,有一部分道条道路,任意两个城市有道路,有一部分道路为单行线,一部分为双向道路。路为单行线,一部分为双向道路。某人去该国旅游,从城市某人去该国旅游,从城市1出发到城市出发到城市n结束,他想做水晶球的生意一结束,他想做水晶球的生意一次挣点旅行费用,每个城市有一个水晶球的价格(买入卖出都一样),次挣点旅行费用,每个城市有一个水晶球的价格(买入卖出都一样),他可以经过每个城市多次。他可以经过每个城市多次。问他能挣最多的费用为多少?问他能挣最多的费用为多少?如下图,假设城市如下图,假设城市15的价格为的价格为4,3,5,6,1则选择则选择1-4-5-4-5路线,路线,挣得挣得5第7页,本
5、讲稿共47页分析这是一道非常典型的图论题这是一道非常典型的图论题,如果有扎实的图论基础解决起来并不如果有扎实的图论基础解决起来并不困难困难.解决这道题的关键是发现解决这道题的关键是发现,我们可以将原图中的任意一个强连通分我们可以将原图中的任意一个强连通分量收缩为一个点量收缩为一个点,这个新点的买入价格等于该强连通分量中最小的这个新点的买入价格等于该强连通分量中最小的买入价格买入价格,这个新点的卖出价格等于该强连通分量中最大的卖出价这个新点的卖出价格等于该强连通分量中最大的卖出价格格.这是因为这是因为,这个新点的性质和一个强连通分量是一样的这个新点的性质和一个强连通分量是一样的,如果我如果我们要
6、在一个强连通分量中进行购买操作们要在一个强连通分量中进行购买操作,一定会选择买入价格最小一定会选择买入价格最小的那个点的那个点,如果我们要在一个强连通分量中进行卖出操作如果我们要在一个强连通分量中进行卖出操作,也一定也一定会选择卖出价格最大的那个点会选择卖出价格最大的那个点.第8页,本讲稿共47页分析所以算法就非常清晰了所以算法就非常清晰了.首先利用首先利用DFS将所有的强连通分量收将所有的强连通分量收缩缩,这样我们就可以得到一个有向无环图这样我们就可以得到一个有向无环图G.由于由于G中没有环中没有环,我们可以对我们可以对G进行拓扑排序进行拓扑排序,然后利用递推求得到达某个点然后利用递推求得到
7、达某个点i时时,可能的最低买入价格可能的最低买入价格best(i)是多少是多少,以及该点最终能否到以及该点最终能否到达终点达终点.最后对于所有能够到达终点的点最后对于所有能够到达终点的点p,设其卖出价格为设其卖出价格为sell(p),在在sell(p)-best(p)中取最大值即得到答案中取最大值即得到答案.时间复杂度仅时间复杂度仅为为O(V+E).在实现的时候最好使用栈消除在实现的时候最好使用栈消除DFS中的递归调用中的递归调用,因为图中的点可因为图中的点可以达到以达到100000,当递归深度达到这么大的时候有相当大的几率发生当递归深度达到这么大的时候有相当大的几率发生栈溢出栈溢出.参考实现
8、中采用了非递归实现参考实现中采用了非递归实现DFS.第9页,本讲稿共47页奇怪的电梯奇怪的电梯大楼的每一层楼都可以停电梯,而且第大楼的每一层楼都可以停电梯,而且第i层楼层楼(1=i=N)上有上有一个数字一个数字Ki(0=Ki=N)。电梯只有四个按钮:开,关,上,。电梯只有四个按钮:开,关,上,下。上下的层数等于当前楼层上的那个数字。当然,如果不下。上下的层数等于当前楼层上的那个数字。当然,如果不能满足要求,相应的按钮就会失灵。例如:能满足要求,相应的按钮就会失灵。例如:33125代表了代表了Ki(K1=3,K2=3,),从一楼开始。在一楼,按,从一楼开始。在一楼,按“上上”可以到可以到4楼,楼
9、,按按“下下”是不起作用的,因为没有是不起作用的,因为没有-2楼。那么,从楼。那么,从A楼到楼到B楼至楼至少要按几次按钮呢?少要按几次按钮呢?输入:输入:二行,第一行为三个用空格隔开的正整数,表示二行,第一行为三个用空格隔开的正整数,表示N,A,B(1N200,1A,BN),第二行为,第二行为N个用空格隔开的正整数,个用空格隔开的正整数,表示表示Ki。输出:仅一行,即最少按键次数输出:仅一行,即最少按键次数,若无法到达,则输出若无法到达,则输出-1。第10页,本讲稿共47页构图LIFT.IN51533125LIFT.OUT3对于对于A楼而言,实际上对它最多只能做楼而言,实际上对它最多只能做2个
10、操作,上到个操作,上到A+X层或下到层或下到A-X层,当然前提是存在层,当然前提是存在A+X或或A-X层。显然,如果把每一层楼看做一个层。显然,如果把每一层楼看做一个顶点,如果顶点,如果A楼可以到楼可以到B楼,则从顶点楼,则从顶点A引一条到顶点引一条到顶点B的边,这样一的边,这样一来,问题就变成了图论中的两顶点间最短路径问题了!当然权设为来,问题就变成了图论中的两顶点间最短路径问题了!当然权设为1就行了。就行了。第11页,本讲稿共47页人穿柱子游戏人穿柱子游戏在一个无限长的条形路上,有n(n=200)个柱子,体积不计,有一个人想从左边走到右边,人近似看成一个半径为R的圆(如下图),问能否实现?
11、第12页,本讲稿共47页构图每个圆的大小完全相同,不存在包含,相切(如果内每个圆的大小完全相同,不存在包含,相切(如果内切,就是重合了,如果外切,就是中间不连通的)等切,就是重合了,如果外切,就是中间不连通的)等等复杂的关系,只有相交和相离的关系,而且如果等复杂的关系,只有相交和相离的关系,而且如果2个圆之间相交的话,那么这个圆之间相交的话,那么这2个圆就是相通的,可以个圆就是相通的,可以在这在这2个圆的圆心之间连一条边,增加一个源点,与个圆的圆心之间连一条边,增加一个源点,与上边有交点的圆和源点连一条边,增加一个汇点,与上边有交点的圆和源点连一条边,增加一个汇点,与下边有交点的圆和汇点连一条
12、边,这样就把一道几何下边有交点的圆和汇点连一条边,这样就把一道几何题完全转换成了一道图论题,只要判断源点和汇点之题完全转换成了一道图论题,只要判断源点和汇点之间是否有路就可以了间是否有路就可以了第13页,本讲稿共47页奇怪的数列奇怪的数列编程输入编程输入3个整数个整数n,p,q,寻找一个由整数组成的数,寻找一个由整数组成的数列(列(a1,a2,an),要求:其中任意连续),要求:其中任意连续p项之和项之和为正数,任意连续为正数,任意连续q项之和为负数。项之和为负数。0n100,0p,qn,若不存在这样的整数数列,则输出,若不存在这样的整数数列,则输出NO;否则输出满;否则输出满足条件的一个数列
13、即可。足条件的一个数列即可。输入格式:输入格式:仅一行分别表示仅一行分别表示n,p,q,之间用一个空格隔开。,之间用一个空格隔开。输出格式:输出格式:只有一行,有解即输出这个数列,每个数之间用一个只有一行,有解即输出这个数列,每个数之间用一个空格隔开。否则输出空格隔开。否则输出NO。第14页,本讲稿共47页分析如果我们按常规思想,直接将第如果我们按常规思想,直接将第i个整数个整数ai开始的开始的k个整数之和描个整数之和描述成多项式述成多项式ai+ai+1+ai+k-1的话,问题就很难再往下思考和解决了。的话,问题就很难再往下思考和解决了。所以,我们不防换个角度,暂且撇去每一项数究竟为何值的具体
14、所以,我们不防换个角度,暂且撇去每一项数究竟为何值的具体细节,而将注意力集中至连续性这一特点上。设细节,而将注意力集中至连续性这一特点上。设si表示数列前表示数列前i个个整数之和,即整数之和,即si=a1+a2+ai。其中。其中s0=0(0in)。显然根据题。显然根据题意,有:意,有:sisi+p(0in-p)si+qsj(0i,jn),则从,则从si往往sj引出一条有向边。引出一条有向边。第15页,本讲稿共47页构图对于n=6,p=5,q=3的情况,我们可以建立下图:第16页,本讲稿共47页对图进行拓扑排序;对图进行拓扑排序;if图有回路图有回路then无解退出无解退出else生成拓扑序列生
15、成拓扑序列order0ordern;那么如果得到了一个拓扑序列,该如何转换成那么如果得到了一个拓扑序列,该如何转换成s数组呢?因为拓扑序列中数组呢?因为拓扑序列中顶点对应的顶点对应的s值是递减的,其中值是递减的,其中s0=0。如果如果orderi=0,则依次设定,则依次设定sorder0=i,sorder1=i-1,sorderi-1=1,sorderi=0,sorderi+1=-1,sordern=i-n。例如,对于上图所示的有向图,可以得到下表:例如,对于上图所示的有向图,可以得到下表:所以,得到所以,得到s0=0,s1=-3,s2=2,s3=-1,s4=-4,s5=1,s6=-2。再根据
16、。再根据s的定义,由:的定义,由:ai=(a0+a1+ai-1+ai)-(a0+a1+ai-1)=si-si-1,求出:,求出:a1=s1-s0=-3,a2=s2-s1=5,a3=s3-s2=-3,a4=s4-s3=-3,a5=s5-s4=5,a6=s6-s5=-3。显然这个整数数列的任意连续个。显然这个整数数列的任意连续个整数之和为正,任意连续个整数之和为负。整数之和为正,任意连续个整数之和为负。第17页,本讲稿共47页牧场规划牧场规划小可可的好朋友小可可的好朋友Sealock最喜欢吃花生了,于是借用了小可可最喜欢吃花生了,于是借用了小可可的牧场从事花生选种试验。他以网格的方式,非常规整地把
17、的牧场从事花生选种试验。他以网格的方式,非常规整地把牧场分割成牧场分割成M*N个矩形区域个矩形区域(M*N5000),由于各个区域中地,由于各个区域中地水面、沼泽面积各不相同,因此各区域地实际可种植面积也水面、沼泽面积各不相同,因此各区域地实际可种植面积也各不相同,已知区域各不相同,已知区域(i,j)地可种面积使地可种面积使A(i,j)。每个区域种最多只能种植一个品种地花生。可种植面积为零地每个区域种最多只能种植一个品种地花生。可种植面积为零地区域不能被选择用来从事选种试验,同时为了防止花粉传播到区域不能被选择用来从事选种试验,同时为了防止花粉传播到相邻区域造成试验结果不正确,任何两个相邻的区
18、域都不可以相邻区域造成试验结果不正确,任何两个相邻的区域都不可以同时种植花生。这里说的相邻指的是两个区域有公共边,仅仅同时种植花生。这里说的相邻指的是两个区域有公共边,仅仅有公共点的两个区域不算做相邻。有公共点的两个区域不算做相邻。小可可准备帮助小可可准备帮助Sealock规划一下如何选择种植区域,才能规划一下如何选择种植区域,才能使得实际可种植面积总和最大。使得实际可种植面积总和最大。第18页,本讲稿共47页构图将试验田转化为点、并连接相邻的试验田后可以发现,我们得到的是一个二分图。将试验田转化为点、并连接相邻的试验田后可以发现,我们得到的是一个二分图。通过对原图的黑白染色,可以把其中的一部
19、分称为白点、另一部分称为黑点。由通过对原图的黑白染色,可以把其中的一部分称为白点、另一部分称为黑点。由二分图建立网络:加入源点和汇点,从源点向每个白点引一条边,容量为白点对二分图建立网络:加入源点和汇点,从源点向每个白点引一条边,容量为白点对应试验田的面积;从每个黑点向汇点引边,容量为该黑点的对应面积。最后将相应试验田的面积;从每个黑点向汇点引边,容量为该黑点的对应面积。最后将相邻点之间的边改为网络中的边,由白点指向黑点,容量为正无穷。通过求网络最邻点之间的边改为网络中的边,由白点指向黑点,容量为正无穷。通过求网络最大流得到它的最小割,即为最优方案。大流得到它的最小割,即为最优方案。S T图图
20、1 建立网建立网络络第19页,本讲稿共47页和平委员会(和平委员会(SPO)要选一个委员会,但是出现了一个问题,某些代表是有矛盾的,要选一个委员会,但是出现了一个问题,某些代表是有矛盾的,不能同时选到委员会里来。现在有不能同时选到委员会里来。现在有n个政党,每个政党只有两个代个政党,每个政党只有两个代表,要从每个政党中选择一个代表,使委员会里的人都是友好的。表,要从每个政党中选择一个代表,使委员会里的人都是友好的。所有的人用所有的人用1到到2n来编号,来编号,2i-1和和2i属于同一个政党。属于同一个政党。读入政党总数,以及不友好的人的对数。读入政党总数,以及不友好的人的对数。计算是否可以建立
21、委员会。如果可以,给出方案。计算是否可以建立委员会。如果可以,给出方案。输入:第一行有两个整数输入:第一行有两个整数n和和m,1=n=8000,0=m=20000。分。分别表示政党的总数以及不友好的关系数。接下来的别表示政党的总数以及不友好的关系数。接下来的m行,每行整数行,每行整数a和和b,1=ab=2n,表示这两个人是有矛盾的。,表示这两个人是有矛盾的。输出:无解则输出输出:无解则输出NIE。否则打印。否则打印n行,从小到大输出你的方案行,从小到大输出你的方案中各人的编号。任意可行解都是可以的。中各人的编号。任意可行解都是可以的。第20页,本讲稿共47页分析:原题可描述为:有n个组,第i个
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 模型 构建

限制150内