tarjan + DP_tree <战争游戏>
2014-11-09 18:43
288 查看
3896. 【NOIP2014模拟10.26】战争游戏 (Standard IO)
Time Limits: 1000 ms Memory Limits: 262144 KB题目大意
n个点,m条无向边连成一个连通图。求对于任一点i,若把i删除,有多少点对无法互相到达。
Input
第一行n,m2....m+1行,每行u v,表示u,v有一条边相连
Output
n行,第i行表示若将i删除,有多少点对不连通(包括i)Sample Input
7 91 2
1 3
1 4
1 5
1 6
1 7
2 3
4 5
6 7
Sample Output
186
6
6
6
6
6
Data Constraint
n<=50000;m<=100000解法::
tarjan+树形dp
缩点双联通分量,然后在树上计算。
实际上可以在 tarjn 的时候顺便处理,要注意 i 是割点不代表删了 i, 的子孙跟父亲都
断了(具体见 game1.cp)。
考虑点与点之间必须经过的只有割点,如果在同一个点双联通分量中的话,则没有必
经的点,那么我们只需要把所有的点双联通分量缩点,之后形成一棵树的结构,在树上计算
经过每个点的点对数量,dp解决。
让我介绍下tarjan求割点吧
选任一点dfs,设dfn[i]为点i的遍历序号
low[i]为不通过i的父节点可以追溯到的序号最小的节点。
显然low[i]=min(dfn[i],low[j]) && j!=i_father&&connect[i][j]=1
对于点u,v
if(dfn[u]<=low[v])
u为割点。
dp很简单详见程序
相关文章推荐
- DP <裸> POJ 1157
- Flex使用<mx:Tree>控件创建树(可添加和删除节点)
- UVA 10534 - Wavio Sequence(自写set<node>优化o(n^2)dp)
- 线性dp<一>
- Android屏幕适配小技巧sw<n>dp
- FWNX- build a binary search tree using array - java version <<recursive>>
- exc_bad_access的错误,找不到<libxml/tree.h> 头文件,retina模拟器怎么缩小的问题,xcode5.1.1怎么运行6.1的模拟器,还有模拟器模拟location
- 2000条你应知的WPF小姿势 基础篇<45-50 Visual Tree&Logic Tree 附带两个小工具>
- <permission-tree> & <permission-group> & <uses-permission> & <permission>
- 黑马程序员_<<Set,TreeSet>>
- libxml2.dylb 添加后 引用不了<libxml/tree.h>
- Flex使用<mx:Tree>控件创建树(可添加和删除节点)
- <sx:tree><sx:tree>树状菜单
- DP<01 背包> POJ 1837
- DP【状态压缩 】 <简单?> hlg 1473
- 树形DP <dfs+floyd> 【hlg】 1329 游乐园
- struts2.2.3标签<s:tree>
- struts2通过<s:tree>或者dtree插件 建立树形结构
- hdu--1176---dp && 滚动数组优化<porker>
- libxml2.dylb 添加后找不到<libxml/tree.h> 头文件