摘要: 题目链接:http://poj.org/problem?id=2378思路:num[u]表示以u为根的子树的顶点个数(包括),如果去掉u之后u的每棵子树都小于等于n/2,则选择u。 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 #define MAXN 11111 8 #define FILL(a,b) memset(a,b,sizeof(a)) 9 10 int n,num[MAXN];11 bool mark[MAXN];12 vector >g;13 14 int df 阅读全文
posted @ 2013-10-03 21:29 ihge2k 阅读(209) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=25830‘思路:类似与数塔问题,自底向上处理,输入的时候稍微注意一下就可以了。 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 #define MAXN 222 7 #define FILL(a,b) memset(a,b,sizeof(a)) 8 9 int g[MAXN][MAXN],dp[MAXN][MAXN];10 int n;11 12 int main()13 . 阅读全文
posted @ 2013-10-03 19:53 ihge2k 阅读(199) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=26882思路:一开始把题意理解错了,还以为是简单路径,然后仔细一看发现是一条路径,意思就是说从起点出发,把所有的点走一遍,于是就要考虑强连通分量,因为对于同一个强连通分量的点是相互可达的,于是我们可以先缩点,建新图,统计新图中顶点的入度与出度的关系,判断即可。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #inc... 阅读全文
posted @ 2013-10-03 17:00 ihge2k 阅读(235) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=1935思路:首先我们考虑从源点出发到所有自己想要经过的点然后在回到源点sum,显然每条边都必须经过源点(这个我们可以一次dfs求出),但题目的意思是可以不用回到源点,那么我们可以再求源点到所有要经过的点的最远距离ans,于是答案便是sum-ans. 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 #define MAXN 55555 7 #define FILL(a,b) memset(a,b,sizeof(a)) 8 9 struct E. 阅读全文
posted @ 2013-10-03 15:10 ihge2k 阅读(495) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=2486思路:经典的树形dp,想了好久的状态转移。dp[i][j][0]表示从i出发走了j步最后没有回到i,dp[i][j][1]表示从i出发走了j步最后回到i。于是我们把所有到情况归结为3种:1、从u(v是其中一颗子树)出发,走了j步,最后停在了v,则有dp[u][j+1][0]=max(dp[u][j+1][0],dp[u][j-k][1]+dp[v][k][0]);(从u->v多走了1步).2、从u出发,走了j步,最后停在了u的另一棵子树上,则有dp[u][j+2][0]=max(dp[u][j+2][0],dp[u][ 阅读全文
posted @ 2013-10-03 11:15 ihge2k 阅读(188) 评论(0) 推荐(0) 编辑