你没看错,国庆第二天我就来了
第一题:基本都能水到分,这道题暴力枚举+dfs即可,注意需要两遍dfs
第二题:
这题说白了考的知识点我还没学=w=
为了以后看,我就把题解复制上去吧
问题1,最少死几个人:
没有入度的点必然不死,不死的点指向的点必死。使用拓扑排序实现,若最后剩下环且环上所有点都不死,则每个环死亡人数为(L+1)/2。
问题2,最多死几个人:
没有入度的点必然不死,若存在没有叶子且长度大于1的环,则该环上有一个人不死。其余人都可以死亡。
http://blog.csdn.net/popoqqq/article/details/46593377
第三题:
还是没学.....(刚学完最短路的弱逼)
这道题找环,使用bf算法或者dfs就可以
第四题:
这道题我用folyd坑了6分233333
其实主要考的是生成树,但是我还没有掌握,所以没有写
pa2014 kuglarz
生成树
http://www.cnblogs.com/zrts/p/bzoj3714.html
第五题&第六题
5:blo bzoj 1124
tarjan 的dfs树
利用DFS求出i及其子树的后向边指向的最高节点,统计深搜树中每个节点的子树大小Si。
Ansi=2*(∑Sj*Sk+(n-∑Sj-1)* ∑Sj+n-1)
{j,k及其子树的后向边不高于i}
要做这题首先样例要看懂= =;
显然不能到达的点对数=n*n-能到达的点对数;
而对于每个连通块来说,能到达的点数为块内点数的平方;
那么就对于一个点,统计删去边后,每个连通块的大小;
所以构造DFS树,所有的非树边都是返祖边;
记录所有点的深度deep,子树大小size,和它与它的子树的返祖边,能到达最小深度top;
那么统计答案时枚举枚举儿子;
如果儿子有高于它的返祖边,那么这颗子树与父树连通,记录父树连通块大小;
由于儿子的子树之间不可能有非树边连通,那么如果儿子没有返祖边就直接记录,ans-=size*size;
最后将父树连通块的点对数减去就好;
注意开long long,别忘了它自身也是一个连通块;
时间复杂度O(n),这个算法似乎是Tarjan。。
但是最近遇到的Tarjan都被改的不成样子= =(或者说都被DFS树水过去了);
============================
6: 来源不明 2011年noip模拟赛
最短路+求方法数
======================题解来自mzx============================
很显然题目要求的是一个图的生成树,这棵生成树要求满足根节点到每个结点的距离都等于原图中的最短距离
我们不妨将这样的树称之为这个图的最短路径生成树
首先生成树中的边肯定是最短路径子图中的边
我来解释一下这个概念……
首先图是由点集和边集两个元素组成的
那么子图的点集和边集肯定是原图中的子集
最短路径子图的点集肯定和原图一样
顾名思义边集就是所有可能出现在最短路径中的边的集合
即E‘={e|dis[e.u]+e.l=dis[e.v]}
我们可以用显然法证明,最短路径生成树一定是最短路径子图的生成树
然鹅最短路径子图的生成树却并不一定是最短路径生成树_(:зゝ∠)_
举个例子
V={1,2,3},E={(1,2,1),(2,3,1),(1,3,2)}(最后一个元素代表边的长度)
显然这个图的每一条边都可能出现在最短路径中
所以这个图的最短路径子图就是它本身
通过这次考试,我深刻地理解到了一点:我的知识点别说熟练了,有些甚至还没学.....
所以图论还是要好好啃,不能浮躁
以上