CF1293E-Xenon's Attack on the Gangs 树状DP

0边把图分成两个部分,这两个部分的路径之间,mex起码为1,都对答案产生1的贡献。

然后1边接在0边旁边,把图分成了更小的两个部分(0,1的两端),和一些不会再产生新的贡献的区域,这两个更小的部分路径之间,mex起码为2,都对答案又产生了1的贡献。(他们在刚刚算mex起码为1的时候,已经贡献过1了,所以再贡献1,mex就起码为2了)。

依次类推,我们发现最后只有一条链上的边放置的是有意义的,其他边都可以随便放,反正不会产生贡献。

我们考虑这种情况下如何求解。

如果只考虑一条链,dp[i][j]从i边开始到j边 结束,放置0~(j-i)这些边的最大贡献。dp[i][j] = lcnt[i] * rcnt[j] + max(dp[i + 1][j],dp[i][j - 1])。

这道题允许O(N^2)做法,所以我们可以枚举每条链,然后用这个DP就行了。

siz[i][root]以root为根,i的孩子有多少。fa[i][root]以root为根,i的父亲是谁。

dp[x][y]就是把x和y之间的路径放置的最大贡献。和上面转移是一样的,只不过看 x的时候,就把y当根,来使得所计算的贡献都是正确的。

 1 #include <cstdio>
 2 #include <algorithm>
 3 #include <cstring>
 4 using namespace std;
 5 typedef long long ll;
 6 const int MAXN = 3100;
 7 int cnt,n;
 8 int head[MAXN],siz[MAXN][MAXN],fa[MAXN][MAXN],nxt[2 * MAXN],to[2 * MAXN];
 9 ll dp[MAXN][MAXN],ans;
10 void add(int x,int y)
11 {
12     nxt[++cnt] = head[x];
13     to[cnt] = y;
14     head[x] = cnt;
15 }
16 void dfs(int x,int root)
17 {
18     siz[x][root] = 1;
19     for (int i = head[x];i;i = nxt[i])
20     {
21         if (to[i] == fa[x][root])
22             continue;
23         fa[to[i]][root] = x;
24         dfs(to[i],root);
25         siz[x][root] += siz[to[i]][root];
26     }
27 }
28 ll dfs2(int x,int y)
29 {
30     if (dp[x][y] != -1)
31         return dp[x][y];
32     return dp[x][y] = siz[x][y] * siz[y][x] + max(dfs2(x,fa[y][x]),dfs2(fa[x][y],y));
33 }
34 int main()
35 {
36     scanf("%d",&n);
37     int tu,tv;
38     for (int i = 1;i <= n - 1;i++)
39     {
40         scanf("%d%d",&tu,&tv);
41         add(tu,tv);
42         add(tv,tu);
43     }
44     memset(dp,-1,sizeof(dp));
45     for (int i = 1;i <= n;i++)
46         dp[i][i] = 0;
47     for (int i = 1;i <= n;i++)
48         dfs(i,i);
49     for (int i = 1;i <= n;i++)
50         for (int j = 1;j <= n;j++)
51             ans = max(ans,dfs2(i,j));
52     printf("%lld\n",ans);
53     return 0;
54 }

CF1293E-Xenon's Attack on the Gangs 树状DP

原文地址:https://www.cnblogs.com/iat14/p/12290105.html

时间: 2024-10-12 13:59:31

CF1293E-Xenon's Attack on the Gangs 树状DP的相关文章

【cf1293E】E.Xenon&#39;s Attack on the Gangs(dp)

传送门 题意: 给出一颗树,树上随机分配\(0\)到\(n-1\)的边权,不存在权值相同的两条边. 定义\(mex(u,v)\)为:树上\(u\)到\(v\)的简单路径中所有边权的\(mex\). 求 \[ \sum_{1\leq u\leq v\leq n}mex(u,v) \] 思路: 将问题转化为求一条边的贡献,显然一条边对跨过这条边的所有点对有贡献: 多条边时,只有链的形式才会增加贡献,可以不用考虑具体的权值分配: 因为数据范围只有\(3000\),考虑枚举每条链进行\(dp\). 记忆

CodeForces 1292C Xenon&#39;s Attack on the Gangs

Description 描述 给一个 $n$ 个点的树,要求你将 $0 \sim n - 2$ 不重不漏的放在这 $n - 1$ 条边上,求 $S = \sum\limits_{1 \le u < v \le n} \operatorname{mex}(u, v)$ 的最大值,$\operatorname{mex}(u, v)$ 表示 $<\! u \to v \!>$ 的路径上所经过的边权集合中最小的没出现的非负数. 输入 第一行一个正整数 $n$($2 \le n \le 3000$

CF1292C Xenon&#39;s Attack on the Gangs 题解

传送门 题目描述 输入格式 输出格式 题意翻译 给n个结点,n-1条无向边.即一棵树.我们需要给这n-1条边赋上0~ n-2不重复的值.mex(u,v)表示从结点u到结点v经过的边权值中没有出现的最小非负整数.计算下面等式的最大值: 样例 样例输入 3 1 2 2 3 样例输入一 5 1 2 1 3 1 4 3 5 样例输入二 样例输出 样例输出一 3 样例输出二 10 分析 我们先随便找一条边,将它的价值赋值成0 那么只要有一个路径经过这条边,那么这个路径的最小价值就一定不会为0 我们举一个例

[CF1292C] Xenon&#39;s Attack on the Gangs

前言 我水一次题解.我是真的真的真的没有时间了,昨晚高考课任务太多了,完全完成一道题就十点半了.这个看懂题意就贼费劲,在晚新闻之前真的没有时间写题了.水一次,真的就这一次,讲完之后一定补上.我谢罪! 题目 原题链接 解说 解说地址(晚自习一定补上自己的思路,谢罪!) 代码 1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 const int maxn=3000+5; 5 int n,rt,p[m

Codeforces Round #614 (Div. 2) E. Xenon&#39;s Attack on the Gangs

On another floor of the A.R.C. Markland-N, the young man Simon "Xenon" Jackson, takes a break after finishing his project early (as always). Having a lot of free time, he decides to put on his legendary hacker "X" instinct and fight ag

POJ 1155 树状dp

TELE Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 3856   Accepted: 2054 Description A TV-network plans to broadcast an important football match. Their network of transmitters and users can be represented as a tree. The root of the tre

洛谷P1122 最大子树和 (树状dp)

题目描述 小明对数学饱有兴趣,并且是个勤奋好学的学生,总是在课后留在教室向老师请教一些问题.一天他早晨骑车去上课,路上见到一个老伯正在修剪花花草草,顿时想到了一个有关修剪花卉的问题.于是当日课后,小明就向老师提出了这个问题: 一株奇怪的花卉,上面共连有N 朵花,共有N-1条枝干将花儿连在一起,并且未修剪时每朵花都不是孤立的.每朵花都有一个“美丽指数”,该数越大说明这朵花越漂亮,也有“美丽指数”为负 数的,说明这朵花看着都让人恶心.所谓“修剪”,意为:去掉其中的一条枝条,这样一株花就成了两株,扔掉

POJ 1463 树状dp

Strategic game Time Limit: 2000MS   Memory Limit: 10000K Total Submissions: 6629   Accepted: 3058 Description Bob enjoys playing computer games, especially strategic games, but sometimes he cannot find the solution fast enough and then he is very sad

POJ 2342 树状dp

Anniversary party Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4606   Accepted: 2615 Description There is going to be a party to celebrate the 80-th Anniversary of the Ural State University. The University has a hierarchical structure