#P7390. 「EZEC-6」造树

    ID: 8041 远端评测题 2000ms 256MiB 尝试: 0 已通过: 0 显示难度NOI/NOI+/CTS 上传者: 标签>贪心2021O2优化排序构造双指针 two-pointerAd-hoc

「EZEC-6」造树

背景

成体系的结论会产出“低猜想水平”的机械推导,但更多的题目中需要“高猜想水平”的灵感。

——command_block 《考前小贴士》

无脑选手出思维题。

题目描述

你要帮 djy 造一棵树,满足以下条件:

  • 由 nn 个点组成。

  • ii 号点的度数为 aia_i。

定义一条边 (i,j)(i,j) 的价值为 bi×bjb_i\times b_j,你要在满足上述两个条件下,使所有边的价值和最大。

保证存在这样的树。

输入格式

第一行一个整数 typetype,表示数据生成方式。

若 type=0type=0:

第二行一个整数 nn。

第三行 nn 个整数,第 ii 个数表示 aia_i。

第四行 nn 个整数,第 ii 个数表示 bib_i。

若 type=1type=1:

给出一个数据生成器模板:

int a[10000005],b[10000005];
unsigned seed;
unsigned rnd(unsigned x){
	x^=x<<13;
	x^=x>>17;
	x^=x<<5;
	return x;
}
int rad(int x,int y){
	seed=rnd(seed);
	return seed%(y-x+1)+x;
}
void init_data(){
	cin>>n>>seed;
	for(int i=1;i<=n;i++)
		a[i]=1,b[i]=rad(1,500000);
	for(int i=1;i<=n-2;i++)
		a[rad(1,n)]++;
}

第二行一个整数 nn。

之后调用 init_data()。

第三行一个整数 seedseed。

输出格式

一行一个整数 ansans,表示最大的价值和。

0
5
1 2 3 1 1 
5 3 1 7 9
42
1
10
114514
249899101316

提示

本题采用捆绑测试。

  • Subtask0 (10 pts):n≤6n\le 6,type=0type=0;
  • Subtask1 (20 pts):n≤103n\le 10^3,type=0type=0;
  • Subtask2 (10 pts):n≤5×105n\le5\times10^5,bi≤2b_i\le2,type=0type=0;
  • Subtask3 (20 pts):n≤105n\le10^5,type=0type=0;
  • Subtask4 (20 pts):n≤5×105n\le5\times10^5,type=0type=0;
  • Subtask5 (20 pts):type=1type=1。

对于 100%100\% 的数据,2≤n≤1072\le n\le10^7,1≤ai≤n1\le a_i\le n,1≤bi≤5×1051\le b_i\le5\times10^5,type∈{0,1}type\in\{0,1\},0≤seed<2310\le seed<2^{31}。