10.2考试总结

你没看错,国庆第二天我就来了

第一题:基本都能水到分,这道题暴力枚举+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)}(最后一个元素代表边的长度)

显然这个图的每一条边都可能出现在最短路径中

所以这个图的最短路径子图就是它本身

通过这次考试,我深刻地理解到了一点:我的知识点别说熟练了,有些甚至还没学.....

所以图论还是要好好啃,不能浮躁

以上

时间: 2024-11-03 21:05:53

10.2考试总结的相关文章

#10.4考试总结

10.4考试总结 P1017 进制转换 题目里的进制转换跟最开始做的区别就是这个权值是负数......在短除过程中可能会有各种问题..... 我想用短除就必须要解决这个负数的问题:-3/-2=2 要做到这个样子.....系统从来不会让你好过:-3%-2=-1,总会为难你一下.就需要自己想办法来解决这个问题 -m+n%m 这个样子就可以解决了.....然后题目就简单了起来.栈储存结果,或者递归输出随意就好 P1004 方格取数 没有仔细看数据范围.在认证研读了一边以后.....这.....(哔~~

#10.6考试总结

10.6考试总结 P1063 能量项链 其实是一道区间DP题.......应该并不难.就是DP做少了? 莫名不会.实际上仔细想一想就明白了.直接枚举分段点进行计算就可以了. for(int l = 1, r = x; r < n2; ++l, ++r) { for(int k = l; k < r; ++k) { f[l][r] = max_(f[l][r], f[l][k] + f[k + 1][r] + num[l] * num[r + 1] * num[k + 1]); } if(x =

10.11考试总结

10.11考试总结 全是DP实际上发现暴力也能有部分分....... 三角形牧场 DP......当时总是感觉不像啊 需要处理的就是枚举三角形边长可能出现的情况.因为周长在输入端时候就可以确定了,所以只需要通过枚举两条边就可以强行算出第三条边..... 所以就省空间+时间.... f[0][0] = 1; for (int i=1; i<=n; ++i) for(int j=half; j>=0; j--) for(int k=j; k>=0; k--) if(j >= d[i]

10.23 考试总结

10.23 考试总结 救火行动 不得不说还是想问候一下出题人的,那个白色的字是什么鬼.....不过看到了不要喧哗倒是很有意思 所以就是一个大模拟题.....因为比较麻烦,只不过数据很小,纯模拟循环都可以过的说. 考试的时候没有注意到一个点就是可以直接灭火的时候当前这一轮是不算这层着火的,也就是说第五层的火势应该只涨i-1 稍微注意一下这个就可以了,然后就还好,其余的还是都有好好注意到的 打篮球 这个题目我是考试的时候一下没有相同怎么建图....实际上暴力枚举各种参数就可以了. 然后就是纯最短最长

10.25 考试总结

10.25 考试总结 距离退役死亡越来越近. circle 其实只要暴力查找就可以了 搜索跑图,稍微注意一下不要让法师反复横跳就可以了,多加一个数据就可以解决只要一找到已经访问过的就证明是环了.... 开始想复杂了,以为可能有一个奇葩的图....原来就是一个简单的环啊 path 其实就是找必经之路,把一些可以多选择的....缩点,实际上就是tarjan缩点, 然后找桥. 桥就是我们要的必经之路 然后又要去学tarjan.....模板一下背不下来 mst 首先用prim 作出最小生成树.然后考虑修

10.29 考试总结

10.29 考试总结 a 咋一看是暴力跑循环,实际上还是暴力循环.只不过根据题目意思,实际上公式\(f(x) + x = n\)而这个f(x)就是x各个位的和.大概脑补一下还是能算出来f(x)最大也就是9*位数就可以将整体的循环控制在几千...... b 设\(dp[i][j][k][0/1]\) 表示当前字符串s 到了第i 位,字符串t 到了第j 位,目前一共 选出了k 个子串,s[i] 与t[j] 是否都被选择的最大长度. 考虑s[i] 与t[j] ,如果我们不将它们加入选择的k 个子串,那

2019.10.18考试解题报告

总结 期望得分:\(100 + 100 + 10\) 实际得分:\(0 + 20 + 10\) 完美. 今天的考试格外完美,\(T1\)做了*\(2.5h\),最后换来了\(0\)分的好成绩,史无前例,美妙绝伦,我竟然不删调试,做得?好. \(T2\)是个好题,是个好阅读题,\(n\)和\(m\)写反了,样例给的是\(n\)和\(m\)相等的情况,最终完美\(100->20\),我竟然这么粗心,题目竟然没读好,做得?好. \(T3\)没时间了,都耗在\(T1\)上了,可惜\(T1\)还没有分,做

2019.10.28~2019.10.31考试总结

连续几天的考试都没有总结,今天有些时间,总结一下这几场考试的情况. 10.28场 开场先读题,然后推了推T2,发现是水题.出于对期望的恐惧,没有选择研究T3,而是回头肝T1,想了很久,没有思路.打完T2,自己搓了一些数据,过了,回头打了T1的暴搜,再打了一个表,似乎部分分挺多的.再做T3,有点思路,但思路并不清晰,于是打了特殊数据就完了. 期望得分:70+100+20=190 最终得分:30+100+20=150 结果T1是DP,没看出来.唔...原题,地精部落,题果然还是做的太少了,有些人做过

18.10.17 考试总结

今天心态崩崩,,,.. 这道题比较简单 因为每一位是单独对答案产生贡献的 所以枚举每一位 用数位dp求出该位是$1$的数量 在求出该位是$0$的 那么答案就是那一位对应的二的幂次再乘以$num1 * num0 * 2$ 每一对会产生两次贡献 代码 #include <bits/stdc++.h> #define rg register #define il inline using namespace std; typedef long long ll; const ll MOD = 1e9