Codeforces 1292C Xenon's Attack on the Gangs
题目链接
Codeforces 1292C Xenon’s Attack on the Gangs
题目大意
给定一棵树,将 [ 0 , n − 2 ] [0,n-2] [0,n−2]内的每个整数都仅用一遍填到每条边上,使得 ∑ 1 ≤ u ≤ v ≤ n m e x ( u , v ) \sum_{1\leq u\leq v\leq n}mex(u,v) ∑1≤u≤v≤nmex(u,v)最大, m e x ( u , v ) mex(u,v) mex(u,v)表示从结点 u u u到结点 v v v经过的边集 A u , v A_{u,v} Au,v中未出现的最小非负整数。
解题思路
我们先来考虑样例,图是这样的:
那么,我们想一下边权为 0 0 0的这条边,它的贡献是多少,根据乘法原理,即
w e i g h t [ i ] = l e f t [ i ] ∗ r i g h t [ i ] , weight[i]=left[i]*right[i], weight[i]=left[i]∗right[i],
它的贡献就是左边的点数 × × ×右边的点数, 3 × 2 = 6 3×2=6 3×2=6。左边是 ( 1 , 2 , 4 ) (1,2,4) (1,2,4),右边是 ( 3 , 5 ) (3,5) (3,5)。
接下去我们算一下边权为 1 1 1的边,但是单单一个边权为 1 1 1的边是做不出任何贡献的,因为有比 1 1 1更小的非负整数 0 0 0,所以这条边必须和边权为 0 0 0的边连在一起才能做出贡献,那么左边的点是 ( 1 , 2 , 4 ) (1,2,4) (1,2,4),右边的点是 ( 5 ) (5) (5),贡献是 3 × 1 = 3 3×1=3 3×1=3。
同理,边权为 2 2 2的边要和边权为 0 0 0的边,边权为 1 1 1的边组成一条链,所以左边的点是 ( 4 ) (4) (4),右边的点是 ( 5 ) (5) (5),贡献是 1 × 1 = 1 1×1=1 1×1=1。
但是边权为 3 3 3的边是做不出任何贡献的,因为这条边和边权为 0 , 1 , 2 0,1,2 0,1,2的边无法组成一条链,它包含不了 0 − 3 0-3 0−3的所有数。
所以样例的答案就是 6 + 3 + 1 = 10 6+3+1=10 6+3+1=10。
可能还有疑惑的地方,比如边权为 2 2 2的边和边权为 0 , 1 0,1 0,1的边连起来后每次贡献应该是最小非负整数 2 + 1 = 3 2+1=3 2+1=3,为什么每个的贡献都是 1 1 1呢?
因为我们在边权为 0 0 0的边的时候已经加了 1 1 1的贡献,那么边权为 1 1 1的边只是在原来的基础上叠加 2 2 2的贡献,边权为 2 2 2的这条边,只需在贡献 1 , 2 1,2 1,2的边上叠加一层 3 3 3的贡献。
所以我们的做法就是:在树上找所有的链再计算贡献。
C o d e Code Code
#include<bits/stdc++.h>
using namespace std;
const int maxn=3005;
long long dp[maxn][maxn],cnt[maxn][maxn];
int fa[maxn][maxn],h[2*maxn],nxt[2*maxn],to[2*maxn],n,x,y,ct;
void dfs(int x,int f,int root){cnt[root][x]=1;fa[root][x]=f;for(int i=h[x];i;i=nxt[i]){int v=to[i];if(v==f)continue;dfs(v,x,root);cnt[root][x]+=cnt[root][v];}
}
long long solve(int x,int y){if(x==y)return 0;if(dp[x][y]!=-1)return dp[x][y];dp[x][y]=cnt[y][x]*cnt[x][y]+max(solve(fa[y][x],y),solve(x,fa[x][y]));return dp[x][y];
}
int main(){cin>>n;for(int i=1;i<n;i++){cin>>x>>y;x--,y--;to[++ct]=y,nxt[ct]=h[x],h[x]=ct;to[++ct]=x,nxt[ct]=h[y],h[y]=ct;}for(int i=0;i<n;i++)dfs(i,-1,i);memset(dp,-1,sizeof(dp));long long ans=0;for(int i=0;i<n;i++)for(int j=0;j<n;j++)ans=max(ans,solve(i,j));cout<<ans<<endl;
}
这边有个视频讲得还不错,值得看看,bilibili。
Codeforces 1292C Xenon's Attack on the Gangs相关推荐
- CodeForces - 1292C Xenon‘s Attack on the Gangs(思维+dp)
题目链接:点击这里 题目大意: 给出一颗有 n n n 个节点的数,将 [ 0 , n − 2 ] [0,n-2] [0,n−2] 内的每个整数各用一次分配到这颗树的 n − 1 n-1 n−1 条边 ...
- E. Xenon's Attack on the Gangs,Codeforces Round #614 (Div. 2),树形dp
E. Xenon's Attack on the Gangs http://codeforces.com/contest/1293/problem/E On another floor of the ...
- Xenon's Attack on the Gangs Codeforces Round #614 (Div. 2)
Xenon's Attack on the Gangs 题意: 给你一棵树,将0~n-2一一赋值给n-1条边,则S最大可能取值 S = ∑ 1 ≤ u < v ≤ n m e x ( u , v ...
- Codeforces Round #614 (Div. 2) E. Xenon's Attack on the Gangs(DP记忆化搜索+思维)
题目链接:https://codeforces.com/contest/1293/problem/E 题目大意: 给出一棵树,要求给树的每条边赋权值,使得树中所有点的 m e x ( x , y ...
- Codeforces 1293 E. Xenon‘s Attack on the Gangs —— 树上记忆化搜索,单点加改成区间加,有丶东西
This way 题意: 现在有一棵大小为n的树,你要往边上放0~n-2这n-1个数,定义mex(u,v)表示u到v路径上的第一个未出现的自然数,定义S 问你S最大是多少. 题解: 我感觉这道题绝不止 ...
- Codeforces Round #614 (Div. 1) C.Xenon's Attack on the Gangs(树形dp)
题目 给你一棵n(n<=3000)个点的树,树上每个点对(u,v)对答案的贡献是mex(u,v), mex就是sg函数里的那个mex 每个点对只被统计一次,令所有点对的贡献和最大,输出贡献和 思 ...
- C. Xenon's Attack on the Gangs(树形dp)
http://codeforces.com/problemset/problem/1292/C 题意: 给出一棵树,n个点,你将0至n-2这n-1个数填到每条边上.一条路径的权值为最小的没有出现过的自 ...
- codeforces1292C Xenon‘s Attack on the Gangs
https://codeforces.com/problemset/status 这题一开始想着dfs贪心贪了好久,后来发现如果出现贡献相等的情况,不知道取那边扩展.花了很多时间才想出来,打cf的时候 ...
- CF1293E Xenon‘s Attack on the Gangs
传送门 题目大意 给定一棵树, n − 1 n-1 n−1条边.问如何在边上填数(范围从0到n-1,且每个数仅出现一次)使得 S S S 最小 S = ∑ 1 ≤ u , v ≤ n m e x ...
最新文章
- java中子类对父类中的私有变量和私有方法有拥有权无使用权
- 转 知道这20个正则表达式,能让你少写1,000行代码
- python虚拟环境搭建mac_mac搭建python virtualenv虚拟环境并使用 - 李金龙
- Java 11新特性_java 11 值得关注的新特性
- matlab 计算 工程,matlab工程计算.doc
- Qt Creator 4.9 发布
- Tkinter文件夹选择路径功能+打开位置目录功能(Python3.6.X)
- 彩翼系列-彩票分析软件源代码(双色球,排三,排五,3D,22选5,30选7)源代码
- ThinkPad T14 Gen3拆机更换升级内存和固态硬盘
- 定制puttygen
- MacOS brew 仓库URL源替换方法
- python 兼职多少钱一小时_无印良品兼职一小时多少钱?看完后就清楚了!
- C++ STL求全排列和组合
- mac svn 服务器及客户端
- [python爬虫]暴力破解Wifi密码
- Neutron 架构
- 比较IC卡、ID卡、M1卡、CPU卡它们之间有什么区别?
- 全球及中国便携式蓝牙音箱行业研究及十四五规划分析报告
- 【cartographer without ros】六、路标landmark数据转换
- Git详解之七 自定义Git
热门文章
- config.c 或者config.s 依照os的不同而config.X 的X也是不同的:
- .NET(C#):await返回Task的async方法
- 实验整理(一)——钓鱼邮件攻击实验
- 跨域 CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR
- AriaNg 是一个让 aria2 更容易使用的现代 Web 前端
- Centos下安装SSH、FTP服务
- groupby后选取列和不选取列的区别
- 怎么确定电脑上没有mysql_怎么检查电脑有没有mysql?
- Android-小游戏
- C. Petya and Exam