UOJ#460. 新年的拯救计划 构造

原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ460.html

题解

  本题的构造方法很多。这里只介绍一种。

  首先,总边数为 $\frac{n(n-1)}2$,每一棵树需要 $2(n-1)$ 条边,所以答案最多是 $\lfloor \frac n 2 \rfloor$ 。

  然后我们来找到构造出 $\lfloor \frac n 2 \rfloor$ 。

  这里我们只考虑 n 为偶数,因为如果 n 为奇数的话就只要在 n-1 的基础上随便连就好了。

  考虑增量法。

  假设当前加入的点为 n-1 和 n ,那么,首先我们在原来的 $\frac {n-2} 2 $ 个树中连上点 n-1 和 n,方法是对于第 $i$ 棵树,$2i-1$ 连 $n-1$, $2i$ 连 $n$;

  接下来我们考虑搞一个新树。首先 $n-1$ 连 $n$ ,然后对于 $1$~$n-2$,偶数连 $n-1$,奇数连 $n$ 。

  构造完毕。

代码

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
LL read(){
	LL x=0;
	char ch=getchar();
	while (!isdigit(ch))
		ch=getchar();
	while (isdigit(ch))
		x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
	return x;
}
const int N=2005;
int n;
vector <pair <int,int> > e[N];
int main(){
	n=read();
	for (int i=2;i<=n;i+=2){
		int j=i-1;
		e[i/2].push_back(make_pair(i,j));
		for (int a=2;a<i;a+=2){
			int b=a-1;
			e[a/2].push_back(make_pair(a,i));
			e[a/2].push_back(make_pair(b,j));
			e[i/2].push_back(make_pair(a,j));
			e[i/2].push_back(make_pair(b,i));
		}
	}
	if (n&1)
		for (int i=1;i<=n/2;i++)
			e[i].push_back(make_pair(i*2,n));
	printf("%d\n",n/2);
	for (int i=1;i<=n/2;i++,puts(""))
		for (auto p : e[i])
			printf("%d %d ",p.first,p.second);
	return 0;
}

  

原文地址:https://www.cnblogs.com/zhouzhendong/p/UOJ460.html

时间: 2024-11-09 14:18:02

UOJ#460. 新年的拯救计划 构造的相关文章

【UOJ#308】【UNR#2】UOJ拯救计划

[UOJ#308][UNR#2]UOJ拯救计划 题面 UOJ 题解 如果模数很奇怪,我们可以插值一下,设\(f[i]\)表示用了\(i\)种颜色的方案数. 然而模\(6\)这个东西很有意思,\(6=2*3\),所以我们只需要考虑其模\(2\)和模\(3\)的结果了. 而最终答案的贡献是\(\sum_{i=1}^k A_{k}^i f[i]\),当\(i\ge 3\)的时候\(6|A_k^i\),所以我们只需要知道\(f[0],f[1],f[2]\)的值. \(f[0]\)的值?当然是\(0\)啊

uoj308 【UNR #2】UOJ拯救计划

传送门:http://uoj.ac/problem/308 [题解] 考虑枚举用了$i$所学校,那么贡献为${k \choose i} * cnt * i!$ 意思是从$k$所选$i$所出来染色,$cnt$为固定颜色顺序的染色方案,$i!$为可以交换学校位置. 考虑当$i \geq 3$的时候,贡献含有模数因子6,所以模6为0,相当于没有贡献. 当$i = 1$,显然只有$m = 0$有贡献. 对于$m = 0$我们特判,答案显然是$K^n$. 剩下$i = 2$的情况,也就是我们要判断答案是不

[UOJ UNR#2 UOJ拯救计划]

来自FallDream的博客,未经允许,请勿转载,谢谢. 传送门 感觉这题有点神... 模数是6比较奇怪,考虑计算答案的式子. Ans=$\sum_{i=1}^{k} P(k,i)*ans(i)$ ans(i)表示恰好用i种颜色的方案数. 发现i<=2时候才有贡献 i=1的时候,只有m=0才有贡献,否则没有 i=2的时候,判断图是否是二分图,是的话答案就是2^(联通块个数) #include<iostream> #include<cstring> #include<cs

Uoj308【UNR #2】UOJ拯救计划

分析:比较难分析的一道题,先把式子写出来,ans=∑C(k,i)*f(i),f(i)是选i个颜色的方案数.这个模数有点奇怪,比较小而且是合数,说不定就会有某种规律,如果i >= 3,可以发现C(k,i)一定是被6整除的,那么我们只需要考虑i=2和i=1的情况,i=1的情况比较好处理,这种情况下,m只有等于0,答案为k^n,然后可以发现,这不仅仅是对i=1的情况的分析,所以我们要先特判m=0. 那么i=2的情况要怎么处理呢?把每个连通块单独分析,如果一个连通块有一个合法方案,反过来又是一个合法方案

uoj 66 新年的巧克力棒 数学

#66. 新年的巧克力棒 Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://uoj.ac/problem/66 Description 马上就要到羊年了,羊村一片欢腾,懒羊羊则懒洋洋地躺在草坪上吃新年的巧克力棒. 他手上的巧克力棒是个由 n 个巧克力单元格组成的长度为 n 的长条,现在懒羊羊想把巧克力棒掰开成一个个小单元格. 初始时懒羊羊会把这根巧克力棒丢在草坪上,然后每次懒羊羊会从草坪上拿起一根长度大于 1 的巧克力棒,然后从某两个相邻的

uoj 67 新年的毒瘤 tarjan求割点

#67. 新年的毒瘤 Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://uoj.ac/problem/67 Description 辞旧迎新之际,喜羊羊正在打理羊村的绿化带,然后他发现了一棵长着毒瘤的树. 这个长着毒瘤的树可以用 n 个结点 m 条无向边的无向图表示.这个图中有一些结点被称作是毒瘤结点,即删掉这个结点和与之相邻的边之后,这个图会变为一棵树.树也即无简单环的无向连通图. 现在给你这个无向图,喜羊羊请你帮他求出所有毒瘤结点. I

uoj#67. 新年的毒瘤(割顶)

#67. 新年的毒瘤 辞旧迎新之际,喜羊羊正在打理羊村的绿化带,然后他发现了一棵长着毒瘤的树. 这个长着毒瘤的树可以用n个结点m 条无向边的无向图表示.这个图中有一些结点被称作是毒瘤结点,即删掉这个结点和与之相邻的边之后,这个图会变为一棵树.树也即无简单环的无向连通图. 现在给你这个无向图,喜羊羊请你帮他求出所有毒瘤结点. 样例一 input 6 6 1 2 1 3 2 4 2 5 4 6 5 6 output 3 4 5 6 256MB 来源 UOJ Goodbye Jiawu [思路] 无向

给程序员的新年9大计划

制定新年计划一定要成为你喜欢做的事情之一,总结上一年的收获,制定新一年的规划.也许,以往制定的计划总是过于宏伟,很多事情都是做不到的,甚至显得遥不可及.但是,今年一定会有所不同,这篇文章就是专为程序员准备的九大新年计划,供各位程序员参考. 1. 学习一门新的不同风格的编程语言 这是很需要的一件事,因为如果你只了解一种语言,它就会局限你解决问题的能力和你的职业发展.所以在新的一年,你应该花些时间学习一门新的语言,体验不同的编程风格,并学以致用. 2. 提高你的已有技能 如今Codecademy,C

uoj 176 新年的繁荣 - 贪心 - 并查集

题目传送门 传送门 题目大意 每个点有一个点权$a_i$,连接点$u$和点$v$的边的边权是$a_u\ and\ a_v$,问最大生成树. 我们从大到小考虑每一种边权,如果两个未连通的点的点权同时包含这个边权作为子集,显然用这样的边连接这些点最优. 因此每一种已经考虑过的边权,我们用并查集取一个代表元. 每枚举到一个新的边权就尝试合并一些已有的连通块. Code 1 /** 2 * uoj 3 * Problem#176 4 * Accepted 5 * Time: 1128ms 6 * Mem