解题:CQOI 2017 小Q的棋盘

题面

由树的结构我们可以知道,最终要么是连一条(最长的)链都没走完,要么是走了一些点最后走了最长的链。为什么总是说最长的链呢,因为在树上这样走的过程中(最后不要求返回的话)除了一条链都会被走两次,显然我们贪心地把最长链走一次即可。

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 using namespace std;
 5 const int N=105;
 6 int n,m,t1,t2,cnt,dps,ans;
 7 int p[N],noww[2*N],goal[2*N];
 8 void link(int f,int t)
 9 {
10     noww[++cnt]=p[f];
11     goal[cnt]=t,p[f]=cnt;
12 }
13 void DFS(int nde,int fth,int dth)
14 {
15     dps=max(dps,dth);
16     for(int i=p[nde];i;i=noww[i])
17         if(goal[i]!=fth) DFS(goal[i],nde,dth+1);
18 }
19 int main ()
20 {
21     scanf("%d%d",&n,&m);
22     for(int i=1;i<n;i++)
23     {
24         scanf("%d%d",&t1,&t2),t1++,t2++;
25         link(t1,t2),link(t2,t1);
26     }
27     DFS(1,0,1),ans=min(dps,m+1),n-=dps,m-=dps-1;
28     printf("%d",ans+min(n,(m+1)/2));
29     return 0;
30 }

原文地址:https://www.cnblogs.com/ydnhaha/p/9770409.html

时间: 2024-10-25 05:30:31

解题:CQOI 2017 小Q的棋盘的相关文章

重庆OI2017 小 Q 的棋盘

小 Q 的棋盘 时间限制: 1 Sec  内存限制: 512 MB 题目描述 小Q正在设计一种棋类游戏.在小Q设计的游戏中,棋子可以放在棋盘上的格点中.某些格点之间有连线,棋子只能在有连线的格点之间移动.整个棋盘上共有V个格点,编号为0,1,2…,V-1,它们是连通的,也就是说棋子从任意格点出发,总能到达所有的格点.小Q在设计棋盘时,还保证棋子从一个格点移动到另外任一格点的路径是唯一的.小Q现在想知道,当棋子从格点0出发,移动N步最多能经过多少格点.格点可以重复经过多次,但不重复计数. 输入 第

20191110luogu3698小Q的棋盘 | 树形背包dp | 贪心

luogu3698小Q的棋盘 题意: 求从树的根节点出发,走n步能经过的最多的点的数量(可以重复走点,但是重复走的步数会记录) 树形背包dp: 对于从0出发,我们可以这样走: 1.选一条岔路一直走下去 2.选一条岔路走后回到0点,再选一条岔路走下去 对应的dp转移: f[0][u][j]代表从u出发走j步不一定回到u点能到达的最大步数 f[1][u][j]代表从u出发走j步回到u点能到达的最大步数 f[0][u][j] = max(f[0][u][j],f[0][u][k] + f[1][too

【bzoj4813】[Cqoi2017]小Q的棋盘 dfs+贪心

题目描述 小Q正在设计一种棋类游戏.在小Q设计的游戏中,棋子可以放在棋盘上的格点中.某些格点之间有连线,棋子只能在有连线的格点之间移动.整个棋盘上共有V个格点,编号为0,1,2-,V-1,它们是连通的,也就是说棋子从任意格点出发,总能到达所有的格点.小Q在设计棋盘时,还保证棋子从一个格点移动到另外任一格点的路径是唯一的.小Q现在想知道,当棋子从格点0出发,移动N步最多能经过多少格点.格点可以重复经过多次,但不重复计数. 输入 第一行包含2个正整数V,N,其中V表示格点总数,N表示移动步数. 接下

【BZOJ】 4813: [Cqoi2017]小Q的棋盘

题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=4813 暴力转移就好,考虑以某一个点为根的子树分为是否走回来两种情况 ${f_{i,j}}$表示已点$i$为根的子树,走了$j$步之后回到点$i$最多能经过多少个点 ${g_{i,j}}$表示已点$i$为根的子树,走了$j$步之后不管停在那个点最多能经过多少个点 写了个${n^{2}}$转移 1 #include<iostream> 2 #include<algorithm>

BZOJ [Cqoi2017] 小Q的棋盘

题解:枚举最后在哪里停止,然后剩下的步数/2 也就是找最大深度 枚举终止位置算是一种思路吧 #include<iostream> #include<cstdio> #include<cstring> using namespace std; const int maxn=10009; int n,m; int maxdep; int cntedge; int head[maxn]; int to[maxn<<1],nex[maxn<<1]; vo

[CQOI2017]小Q的棋盘

https://zybuluo.com/ysner/note/1218474 题面 一棵有\(n\)个结点的树,问从\(1\)(根)结点出发,走\(m\)步最多能经过多少结点. \(n\leq100\) 解析 数据范围亮了 显然,在根结点周围转一圈再回来,走最长链到底是最值的. 于是先求出最长链\(L\). 如果\(L>m\),\(ans=m+1\); 否则剩下\(n-(L-1)\)步,能多走\(\frac{n-L+1}{2}\)个点.(画画图发现找不出什么特殊情况) 即\[ans=min(n,

[ZJOI2007] 小Q的矩阵游戏【解题报告】

戳我 660. [ZJOI2007] 小Q的矩阵游戏 ★★☆   输入文件:qmatrix.in   输出文件:qmatrix.out   简单对比时间限制:1 s   内存限制:128 MB [问题描述] 小Q是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩一个电脑益智游戏——矩阵游戏.矩阵游戏在一个N*N黑白方阵进行(如同国际象棋一般,只是颜色是随意的).每次可以对该矩阵进行两种操作: l 行交换操作:选择矩阵的任意两行,交换这两行(即交换对应格子的颜色) l 列交换操作:选择矩阵的任意两列

小兔的棋盘

小兔的棋盘 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 6748 Accepted Submission(s): 3634 Problem Description 小兔的叔叔从外面旅游回来给她带来了一个礼物,小兔高兴地跑回自己的房间,拆开一看是一个棋盘,小兔有所失望.不过没过几天发现了棋盘的好玩之处.从起点(0,0)走到终点(n,n)的最

HDU 4520 小Q系列故事——最佳裁判

Time Limit : 500/200ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other) Problem Description 过去的2012年对小Q来说是很悲催的一年,失恋了12次,每次都要郁闷1个来月. 好在小Q是个体育迷,在最痛苦的时候,他常常用观看各种体育节目来麻醉自己,比如伦敦奥运会期间,小Q就常常在周末邀上一群单身同事聚在自己的蜗居,一边畅饮啤酒,一边吹牛. 小Q最喜欢看的是跳水,主要原因也是因为这个项目有中国人参