HDU 5886 Tower Defence】的更多相关文章

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAA2MAAAERCAIAAAB5Jui9AAAgAElEQVR4nOy9a6wsS3YmFL/cEkh4LP…
树的直径. 比赛的时候想着先树$dp$处理子树上的最长链和次长链,然后再从上到下进行一次$dfs$统计答案,和$CCPC$网络赛那个树$dp$一样,肯定是可以写的,但会很烦.......后来写崩了. 然后有一种新思路,很容易写. 假设下图中红线是树的直径,圆圈是直径上的节点,黑线表示一颗树. 如果删除的边不在直径上,那么删除这条边的答案就是直径长度. 如果删除的边在直径上,也就把下面的图分成了两半,左边和右边. 左边最大值会在什么情况下产生? 必然是$A->B->C$这样的情况产生的.不可能是…
题目链接  2016 Qingdao Online Problem I 题意  在一棵给定的树上删掉一条边,求剩下两棵树的树的直径中较长那的那个长度的期望,答案乘上$n-1$后输出. 先把原来那棵树的直径求出来.显然删掉的边不是这条直径上的边,那么这时答案就是这条直径的长度. 否则就是直径的某个端点到某一个点(要求连通)的距离的最大值. 在整条链上做两次$DP$之后枚举取较大值即可. #include <bits/stdc++.h> using namespace std; #define r…
题意:考虑由$n$个结点构成的无向图,每条边的长度均为$1$,问有多少种构图方法使得结点$1$与任意其它节点之间的最短距离均不等于$k$(无法到达时距离等于无穷大),输出答案对$1e9+7$取模.$1 \leq n, k \leq 60$. 分析:只需要考虑那些和结点$1$在同一个连通块的结点,考虑对包含结点$1$的连通图的等价类划分:首先是结点数目,其次是所有结点到达结点$1$的最短距离的最大值,再次是最短距离等于该最大值的结点数目,因此用$dp(i, j, k)$表示与$1$在同一个连通分量…
Description Alan loves to construct the towers of building bricks. His towers consist of many cuboids with square base. All cuboids have the same height \(h = 1\). Alan puts the consecutive cuboids one over another: Recently in math class, the concep…
Tower Defense Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 132768/132768 K (Java/Others) Total Submission(s): 474    Accepted Submission(s): 126 Problem Description DRD loves playing computer games, especially Tower Defense games. Tower De…
题意:N个点的一棵带权树.切掉某条边的价值为切后两树直径中的最大值.求各个边切掉后的价值和(共N-1项). 解法一: 强行两遍dp,思路繁琐,维护东西较多: dis表示以i为根的子树的直径,dis2表示切掉以i为根的子树后的直径. 第一遍dp,记录 down[][0]:从i结点向下的最大距离  down[][1]:与down[][0]无交集的向下次大距离  dis:以i为根的子树的直径 第二遍dp,记录 up:从i结点向上的最远距离, 可以是w+父节点的up,也可以是w+父节点的down(判断一…
分析(官方题解): 一点感想:(这个题是看题解并不是特别会转移,当然写完之后看起来题解说得很清晰,主要是人太弱 这个题是参考faebdc神的代码写的,说句题外话,很荣幸高中和faebdc巨一个省,虽然本弱渣高中都没搞过oi) 最短路不等于k,所以根本不存在最短路>=k的,因为存在的话,由最短路知识可知,k+1一定是由k更新过来的,矛盾 所以最短路不等于k,即最短路小于k 然后就是不管是多校还是bc,都能碰到有关图的计数类的dp问题,比如2016多校1的刚性图,计算连通二分图的数量 这个题是计算无…
/** 题意: 有两种塔,重塔,轻塔.每种塔,能攻击他所在的一行和他所在的一列, 轻塔不 能被攻击,而重塔可以被至多一个塔攻击,也就是说重塔只能被重塔攻击.在一个n*m 的矩阵中,最少放一个塔,可放多个 问,给定p个重塔,q个轻塔,问有多少种放法.. 思路: 1. 一行中有两个重塔, 2. 一列中有两个重塔 3. 在该行及在该行塔所在的列只有一个塔,重塔或者轻塔. 对以上三种情况 挨个处理: 1. 设有i行有两个重塔,j列有两个重塔,则一共占 i+2*j 行, j+2*i列,共用2*(i+j)个…
dp[i][j][k] 已选i个人 选到第j层 第j层有k个人 讨论相邻层  上一层选了l人 那么共有 两层之间的方案数 以及这一层自己的方案数 #include<bits/stdc++.h> using namespace std; typedef long long ll; const int MOD = 1e9+7; ll Pow[3605]; ll dp[65][65][65]; ll C[65][65]; int N,K; void debug(){ for(int i = 1; i…