NOIP2018提高组复赛试题day2
2018年第二十四届全国青少年信息学奥林匹克联赛初赛提高组含问题详解(WORD重新整理排版)

第二十四届全国青少年信息学奥林匹克联赛初赛提高组 C++语言试题竞赛时间:2018 年 10 月 13 日 14:30~16:30(WORD重新整理排版)选手注意:●试题纸共有 9 页,答题纸共有 2 页,满分 100 分。
请在答题纸上作答,写在试题纸上的一律无效。
●不得使用任何电子设备(如计算器、手机、电子词典等)或查阅任何书籍资料。
一、单项选择题(共 10 题,每题 2 分,共计 20 分;每题有且仅有一个正确选项)1. 下列四个不同进制的数中,与其它三项数值上不相等的是()。
A. (269)16B. (617)10C. (1151)8D. (1001101011)22. 下列属于解释执行的程序设计语言是()。
A. CB. C++C. PascalD. Python3. 中国计算机学会于()年创办全国青少年计算机程序设计竞赛。
A. 1983B. 1984C. 1985D. 19864. 设根节点深度为 0,一棵深度为 h 的满 k(k>1)叉树,即除最后一层无任何子节点外,每一层上的所有结点都有 k 个子结点的树,共有()个结点。
A. (k h+1 - 1) / (k - 1)B. k h-1C. k hD. (k h-1 ) / (k - 1)5. 设某算法的时间复杂度函数的递推方程是 T(n) = T(n - 1) + n(n 为正整数)及 T(0) = 1,则该算法的时间复杂度为()。
A. O(log n)B. O(n log n)C. O(n)D. O(n2 )6. 表达式 a * d - b * c 的前缀形式是()。
A. a d * b c * -B. - * a d * b cC. a * d - b * cD. - * * a d b c7. 在一条长度为 1 的线段上随机取两个点,则以这两个点为端点的线段的期望长度是()。
A. 1 / 2B. 1 / 3C. 2 / 3D. 3 / 58. 关于 Catalan 数 Cn = (2n)! / (n + 1)! / n!,下列说法中错误的是()。
NOIP复赛模拟题2

NOIP复赛测试题31、神牛果(cow.cpp)【题目描述】在某次膜拜大会上,一些神牛被要求集体膜拜。
这些神牛被奖励每人吃一些神牛果。
但是,每个神牛的肚量不一样。
为了不显得某些人吃得太多,决定两人一组,使得吃得最多的那组吃得尽量少。
(神牛数为偶数)【输入格式】第一行一个整数 n(<=10000) 。
第二行有 n 个正整数,为给定的一列数字,表示每个神牛能吃多少神牛果。
(数字均小于 1000000000)【输出格式】一个正整数,吃的最多的一组神牛吃的个数的最小值。
【输入样例】41 52 8【输出样例】92、序列1(ones.cpp)【题目描述】输入一个不含因子2和5的整数n,计算在十进制下至少多少个连续的1能被n整除。
【输入格式】第一行为正整数t(<10000);接下来t行,每行一个正整数n(≤10000)。
【输出格式】对于每个数据,输出一个整数m,表示至少连续m个1能被n整除。
【输入样例】239901【输出样例】312【样例说明】111能被3整除,而111111111111能被9901整除。
3、过桥问题(bridge.cpp)【问题描述】现在有N辆车要按顺序通过一个单向的小桥,由于小桥太窄,不能有两辆车并排通过,所以在桥上不能超车。
另外,由于小桥建造的时间已经很久,所以只能承受有限的重量,记为MAX(吨),即任意时刻在桥上行驶的车辆的总重量不能超过MAX(吨)。
因此,车辆在过桥的时候必须有管理员控制,将这N辆车按初始的顺序分组,每次让一个组过桥,并且只有在一个组中的所有的车辆全部过桥之后才能让下一组车辆上桥,而每组车的过桥时间由该组中速度最慢的那辆车决定。
现在,给出每辆车的重量和最大速度,编程将这N辆车分组,使得全部车辆通过小桥的时间最短。
【输入格式】第一行有3个数,分别为MAX(吨)、Len(桥的长度,单位:Km)和N(以空格隔开);接下来有N行,每行有两个数,分别表示每辆车的重量Ti(吨)和最大速度Vi(Km/h)。
NOIP2018_day2

输出文件名为travel.out。
输出文件包含一行,! n 个整数,表示字典序最小的序列。相邻两个整数之间用一 个空格分隔。
【输入输出样例1】
travel.in
65 13 23 25 34 46
travel.out 132546
见选手目录下的travel/travel1.in和travel/travel1.ans。
● 在城市里驻扎军队会产生花费,在编号为!i的城市中驻扎军队的花费是p! i。 小Z很快就规划出了一种驻扎军队的方案,使总花费最小。但是国王又给小Z提出
了m! 个要求,每个要求规定了其中两座城市是否驻扎军队。小Z需要针对每个要求逐一 给出回答。具体而言,如果国王提出的第j! 个要求能够满足上述驻扎条件(不需要考虑 第j个要求之外的其它要求),则需要给出在此要求前提下驻扎军队的最小开销。如果
过这些道路从一个城市前往另一个城市。
小Y的旅行方案是这样的:任意选定一个城市作为起点,然后从起点开始,每次可 以选择一条与当前城市相连的道路,走向一个没有去过的城市,或者沿着第一次访问 该城市时经过的道路后退到上一个城市。当小Y回到起点时,她可以选择结束这次旅行 或继续旅行。需要注意的是,小Y要求在旅行方案中,每个城市都被访问到。
小Y是一个爱好旅行的OIer。她来到X国,打算将各个城市都玩一遍。
小Y了解到,X国的! n 个城市之间有! m 条双向道路。每条双向道路连接两个城 市。不存在两条连接同一对城市的道路,也不存在一条连接一个城市和它本身的道路。
并且,从任意一个城市出发,通过这些道路都可以到达任意一个其他城市。小Y只能通
fpc defense.pas
注意事项:
1、文件名(程序名和输入输出文件名)必须使用英文小写。 2、C/C++中函数main()的返回值类型必须是int,程序正常结束时的返回值必须是0。 3、全国统一评测时采用的机器配置为:Intel(R) Core(TM) i7-8700K CPU @ 3.70GHz,内存
NOIP2018提高组参考答案

第二十四届全国青少年信息学奥林匹克联赛初赛
提高组参考答案
一、单项选择题(共10题,每题2分,共计20分)
1 2 3 4 5 6 7 8 9 10
D D B A D B B A D B
二、不定项选择题(共5题,每题2分,共计10分;每题有一个或多个正确选项,没有部分分)
1 2 3 4 5
AB CD ABD ABD BCD
三、问题求解(共2题,每题5分,共计10分)
1.去了没去没去没下雨(第4空2分,其余1分)
2.454
四、阅读程序写结果(共4题,每题8分,共计32分)
1. 4
2. 6
3.16
4.输出1:2 1 3 5 6 4(3分)输出2:3 2 5 6 1 4(5分)
五、完善程序(共计28分,以下各程序填空可能还有一些等价的写法,由各省赛区组织本省专家审定及上机验证,可以不上报CCF NOI科学委员会复核)
Pascal语言C++语言C语言分值
1 . (1) a[x] := i a[x] = i 3
(2) i + 1 2
(3) R[a[i]] 3
(4) a[i] 3
(5) R[i] 3 2
2 . (1) a[i] * 0.95 <= b[i] 或b[i] >= a[i] * 0.95 2
(2)
total_a >= threshold 或threshold <= total_a 或total_a >= 50000 或50000 <=
total_a
3
(3) total_a + j + a[i] 3
(4) f[j] + total_b - total_b_prefix 3
(5) f[j - a[i]] 3。
(完整word版)2018noip复赛资料

S ort()排序三个参数,例1:int a[10];sort(a,a+5);//从a[0]到a[4]排序例2:bool cmp(asd a,asd b){if(){return true;}return flase;}asd a[10];sort(a,a+5,cmp);用cmp规则排序next_permutation()定义在<algorithm>里面。
参数为迭代器,可以理解为地址,对数组a全排列为next_permutation(a,a+n);需排参数可是任意类型,按字典序排列,默认由小到大。
若可生成下一个全排列,返回true,否则返回false。
该函数为生成下一个递增排列。
若输出全排列,需对原数组排序。
prev_permutation()为上一个排列。
该函数的第三个参数可为自定义标准,由此可对结构体中的某个元素进行全排列。
与sort()用法相似。
广度优先遍历广度优先遍历从某个顶点出发,首先访问这个顶点,然后找出这个结点的所有未被访问的邻接点,访问完后再访问这些结点中第一个邻接点的所有结点,重复此方法,直到所有结点都被访问完为止。
用邻接矩阵或邻接表记录图,通过队列遍历。
定义一个结构体,x表示节点,l表示广度,队列里存放结构体变量,依次取出并搜其能到达的节点。
将其放入队列直至符合要求。
深度优先遍历深度优先搜索的主要思想是:首先以一个未被访问过的顶点为起始顶点,沿当前顶点的边走到未访问过的节点,当没有未访问过的顶点时,则回到上一个顶点,继续试探访问别的顶点,直到所有的定点都被访问过。
即沿着图的某一条分支遍历直到末端,然后回溯,再沿着另一条进行同样的遍历,直到所有的顶点都被访问过为止。
用邻接矩阵或邻接表记录图,通过递归遍历。
若求路径则用栈存储。
函数两个变量,一个为节点,一个为深度。
宗教信仰:#include <cstdio>#include <vector>#include <algorithm>#include <cstring>using namespace std;const int N=50000+5;vector<int> G[N];int vis[N];int n,m;void dfs(int u) {if(vis[u]==1)return;vis[u]=1;int d=G[u].size();for(int i=0; i<d; i++) {int v=G[u][i];//if(vis[v]==0)dfs(v);}}int main() {int number=0;while(scanf("%d%d",&n,&m)!=EOF) {if(n==0&&m==0)break;for(int i=1; i<=n; i++)G[i].clear();//清空for(int i=1; i<=m; i++) {int u,v;scanf("%d%d",&u,&v);G[u].push_back(v);G[v].push_back(u);}memset(vis,0,sizeof(vis));int cc=0;for(int u=1; u<=n; u++) {if(vis[u]==0) {cc++;dfs(u);}}number++;printf("Case %d: %d\n",number,cc);}return 0;}链式前向星有权边的图的存储一般有两种:邻接矩阵(存点)、前向星(存边)。
信息学竞赛NOIP2018复赛提高组day2题目解答

全国信息学奥林匹克联赛(NOIP2018)复赛 M z(INF); for(int i=0;i<=1;i++) for(int j=0;j<=1;j++) for(int k=0;k<=1;k++) z.a[i][k]=min(z.a[i][k],a[i][j]+y.a[j][k]); return z; } }; struct lnk { lnk *last; long long x1,x2; lnk *left,*right; M now; lnk() { left=NULL; right=NULL; last=NULL; } void Trans() { now.a[0][0]=INF; now.a[1][0]=x2; now.a[1][1]=x2; now.a[0][1]=x1; if(right!=0) now=now*(right->now); if(left!=0) now=(left->now)*now; }
全国信息学奥林匹克联赛(NOIP2018)复赛 } } int main() { freopen("travel.in","r",stdin); freopen("travel.out","w",stdout); int n, m; scanf("%d%d",&n,&m); for(int i=1;i<=m;i++) { scanf("%d%d",&edge[i].x,&edge[i].y); D[edge[i].x]++; D[edge[i].y]++; } for(int i=1;i<=n;i++) { a[i]=new int[D[i]+1]; a[i][0]=D[i]; } for(int i=1;i<=m;i++) { int x=edge[i].x,y=edge[i].y; a[x][D[x]--]=y; a[y][D[y]--]=x; } for(int i=1;i<=n;i++) sort(a[i]+1,a[i]+a[i][0]+1); if(m==n) { ans[1]=2;
【精选资料】NOIP提高组复赛试题与简解转载

Day1铺地毯【问题描述】为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯。
一共有n 张地毯,编号从1 到n。
现在将这些地毯按照编号从小到大的顺序平行于坐标轴先后铺设,后铺的地毯覆盖在前面已经铺好的地毯之上。
地毯铺设完成后,组织者想知道覆盖地面某个点的最上面的那张地毯的编号。
注意:在矩形地毯边界和四个顶点上的点也算被地毯覆盖。
【输入】输入文件名为 carpet.in。
输入共 n+2 行。
第一行,一个整数 n,表示总共有n 张地毯。
接下来的 n 行中,第i+1 行表示编号i 的地毯的信息,包含四个正整数a,b,g,k,每两个整数之间用一个空格隔开,分别表示铺设地毯的左下角的坐标(a,b)以及地毯在x轴和y 轴方向的长度。
第 n+2 行包含两个正整数x 和y,表示所求的地面的点的坐标(x,y)。
【输出】输出文件名为 carpet.out。
输出共 1 行,一个整数,表示所求的地毯的编号;若此处没有被地毯覆盖则输出-1。
【输入输出样例 1】【输入输出样例说明】如下图,1 号地毯用实线表示,2 号地毯用虚线表示,3 号用双实线表示,覆盖点(2,2)的最上面一张地毯是3 号地毯。
【输入输出样例 2】【输入输出样例说明】如上图,1 号地毯用实线表示,2 号地毯用虚线表示,3 号用双实线表示,点(4,5)没有被地毯覆盖,所以输出-1。
【数据范围】对于 30%的数据,有n≤2;对于 50%的数据,0≤a, b, g, k≤100;对于 100%的数据,有0≤n≤10,000,0≤a, b, g, k≤100,000。
【一句话题意】给定n个按顺序覆盖的矩形,求某个点最上方的矩形编号。
【考察知识点】枚举【思路】好吧我承认看到图片的一瞬间想到过二维树状数组和二维线段树。
置答案ans=-1,按顺序枚举所有矩形,如果点在矩形内则更新ans。
注意题中给出的不是对角坐标,实际上是(a,b)与(a+g,b+k)。
【NOIP2018提高组】货币系统

【NOIP2018提高组】货币系统题目描述在网友的国度中共有n 种不同面额的货币,第i 种货币的面额为a[i],你可以假设每一种货币都有无穷多张。
为了方便,我们把货币种数为n、面额数组为a[1…n]的货币系统记作 (n,a)。
在一个完善的货币系统中,每一个非负整数的金额x 都应该可以被表示出,即对每一个非负整数xx,都存在nn 个非负整数t[i] 满足a[i]×t[i] 的和为 x。
然而,在网友的国度中,货币系统可能是不完善的,即可能存在金额x不能被该货币系统表示出。
例如在货币系统n=3, a=[2,5,9]中,金额 1,3 就无法被表示出来。
两个货币系统 (n,a) 和 (m,b) 是等价的,当且仅当对于任意非负整数xx,它要么均可以被两个货币系统表出,要么不能被其中任何一个表出。
现在网友们打算简化一下货币系统。
他们希望找到一个货币系统(m,b),满足 (m,b) 与原来的货币系统 (n,a) 等价,且 m 尽可能的小。
他们希望你来协助完成这个艰巨的任务:找到最小的 m。
输入格式输入文件名为 money.in。
输入文件的第一行包含一个整数 T,表示数据的组数。
接下来按照如下格式分别给出 T 组数据。
每组数据的第一行包含一个正整数 n。
接下来一行包含 n 个由空格隔开的正整数 a[i]。
输出格式输出文件名为 money.out。
输出文件共有T 行,对于每组数据,输出一行一个正整数,表示所有与 (n,a) 等价的货币系统 (m,b) 中,最小的 m。
样例输入243 19 10 6511 29 13 19 17样例输出25数据范围说明第一组数据中,货币系统 (2,[3,10]) 和给出的货币系统 (n,a) 等价,并可以验证不存在 m<2 的等价的货币系统,因此答案为 2。
在第二组数据中,可以验证不存在 m<n 的等价的货币系统,因此答案为 5。
解析这道题目的思路用简单的一句话来说就是如果可以在较小面值之间任意组合找到一种可以表示出较大面值的情况,那就较大面值就是无意义的存在。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
CCF全国信息学奥林匹克联赛(NOIP2018)复赛提高组 day2(请选手务必仔细阅读本页内容)注意事项:1、文件名(程序名和输入输出文件名)必须使用英文小写。
2、C/C++中函数main()的返回值类型必须是int,程序正常结束时的返回值必须是0。
3、全国统一评测时采用的机器配置为:Intel(R) Core(TM) i7-8700K CPU @ 3.70GHz,内存32GB。
上述时限以此配置为准。
4、只提供Linux格式附加样例文件。
5、特别提醒:评测在当前最新公布的NOI Linux下进行,各语言的编译器版本以其为准。
1.旅行(travel.cpp/c/pas)【问题描述】小Y是一个爱好旅行的OIer。
她来到X国,打算将各个城市都玩一遍。
小Y了解到,X国的 n 个城市之间有 m 条双向道路。
每条双向道路连接两个城市。
不存在两条连接同一对城市的道路,也不存在一条连接一个城市和它本身的道路。
并且,从任意一个城市出发,通过这些道路都可以到达任意一个其他城市。
小Y只能通过这些道路从一个城市前往另一个城市。
小Y的旅行方案是这样的:任意选定一个城市作为起点,然后从起点开始,每次可以选择一条与当前城市相连的道路,走向一个没有去过的城市,或者沿着第一次访问该城市时经过的道路后退到上一个城市。
当小Y回到起点时,她可以选择结束这次旅行或继续旅行。
需要注意的是,小Y要求在旅行方案中,每个城市都被访问到。
为了让自己的旅行更有意义,小Y决定在每到达一个新的城市(包括起点)时,将它的编号记录下来。
她知道这样会形成一个长度为 n 的序列。
她希望这个序列的字典序最小,你能帮帮她吗?对于两个长度均为 n 的序列A和B,当且仅当存在一个正整数x,满足以下条件时,我们说序列A的字典序小于B。
⚫对于任意正整数1≤i<x,序列A的第i个元素A i和序列B的第i个元素B i相同。
⚫序列A的第x个元素的值小于序列B的第x个元素的值。
【输入格式】输入文件名为travel.in。
输入文件共 m+1 行。
第一行包含两个整数 n,m(m≤n),中间用一个空格分隔。
接下来 m 行,每行包含两个整数 u,v (1≤u,v≤n) ,表示编号为 u 和 v 的城市之间有一条道路,两个整数之间用一个空格分隔。
【输出格式】输出文件名为travel.out。
输出文件包含一行, n 个整数,表示字典序最小的序列。
相邻两个整数之间用一个空格分隔。
travel/travel1.in travel/travel1.ans见选手目录下的travel/travel2.in和travel/travel2.ans。
【输入输出样例3】见选手目录下的travel/travel3.in和travel/travel3.ans。
这组样例满足 m=n−1 。
【输入输出样例4】见选手目录下的travel/travel4.in和travel/travel4.ans。
这组样例满足 m=n 。
【数据规模与约定】对于 100% 的数据和所有样例,1≤n≤5000且m=n−1或m=n 。
2. 填数游戏(game.cpp/c/pas)【问题描述】小D特别喜欢玩游戏。
这一天,他在玩一款填数游戏。
这个填数游戏的棋盘是一个n×m的矩形表格。
玩家需要在表格的每个格子中填入一个数字(数字0或者数字1),填数时需要满足一些限制。
下面我们来具体描述这些限制。
为了方便描述,我们先给出一些定义:•我们用每个格子的行列坐标来表示一个格子,即(行坐标,列坐标)。
(注意:行列坐标均从0开始编号)•合法路径P:一条路径是合法的当且仅当:1.这条路径从矩形表格的左上角的格子(0,0)出发,到矩形的右下角格子(n−1,m−1)结束;2.在这条路径中,每次只能从当前的格子移动到右边与它相邻的格子,或者从当前格子移动到下面与它相邻的格子。
例如:在下面这个矩形中,只有两条路径是合法的,它们分别是P1:(0,0)→(0,1)→(1,1)和P2:(0,0)→(1,0)→(1,1)。
对于一条合法的路径P,我们可以用一个字符串w(P)来表示,该字符串的长度为n+ m−2,其中只包含字符“R”或者字符“D”,第i个字符记录了路径P中第i步的移动方法,“R”表示移动到当前格子右边与它相邻的格子,“D”表示移动到当前格子下面与它相邻的格子。
例如,上图中对于路径P1,有w(P1)="RD";而对于另一条路径P2,有w(P2)="DR"。
同时,将每条合法路径P经过的每个格子上填入的数字依次连接后,会得到一个长度为n+m−1的01字符串,记为s(P)。
例如,如果我们在格子(0,0)和(1,0)上填入数字0,在格子(0,1)和(1,1)上填入数字1(见上图红色数字)。
那么对于路径P1,我们可以得到s(P1)="011",对于路径P2,有s(P2)="001"。
游戏要求小D找到一种填数字0、1的方法,使得对于两条路径P1,P2,如果w(P1)> w(P2),那么必须s(P1)≤s(P2)。
我们说字符串a比字符串b小,当且仅当字符串a的字典序小于字符串b的字典序,字典序的定义详见第一题。
但是仅仅是找一种方法无法满足小D的好奇心,小D更想知道这个游戏有多少种玩法,也就是说,有多少种填数字的方法满足游戏的要求?小D能力有限,希望你帮助他解决这个问题,即有多少种填0、1的方法能满足题目要求。
由于答案可能很大,你需要输出答案对109+7取模的结果。
【输入格式】输入文件名为game.in。
输入文件共一行,包含两个正整数n、m,由一个空格分隔,表示矩形的大小。
其中n 表示矩形表格的行数,m表示矩形表格的列数。
【输出格式】输出文件名为game.out。
输出共一行,包含一个正整数,表示有多少种填0、1的方法能满足游戏的要求。
注意:输出答案对109+7取模的结果。
game.in game.out2 2 12game/game1.in game/game1.ans。
【样例解释】对于2×2棋盘,有上图所示的12种填数方法满足要求。
game.in game.out3 3 112game/game2.in game/game2.ans。
game.in game.out5 5 7136game/game3.in game/game3.ans。
【数据规模与约定】3.保卫王国(defense.cpp/c/pas)【问题描述】Z国有n座城市,n−1条双向道路,每条双向道路连接两座城市,且任意两座城市都能通过若干条道路相互到达。
Z国的国防部长小Z要在城市中驻扎军队。
驻扎军队需要满足如下几个条件:⚫一座城市可以驻扎一支军队,也可以不驻扎军队。
⚫由道路直接连接的两座城市中至少要有一座城市驻扎军队。
⚫在城市里驻扎军队会产生花费,在编号为i的城市中驻扎军队的花费是p i。
小Z很快就规划出了一种驻扎军队的方案,使总花费最小。
但是国王又给小Z提出了m个要求,每个要求规定了其中两座城市是否驻扎军队。
小Z需要针对每个要求逐一给出回答。
具体而言,如果国王提出的第j个要求能够满足上述驻扎条件(不需要考虑第j个要求之外的其它要求),则需要给出在此要求前提下驻扎军队的最小开销。
如果国王提出的第j个要求无法满足,则需要输出-1 (1≤j≤m)。
现在请你来帮助小Z。
【输入格式】输入文件名为defense.in。
第1行包含两个正整数n,m和一个字符串type,分别表示城市数、要求数和数据类型。
type是一个由大写字母A,B或C和一个数字1,2,3组成的字符串。
它可以帮助你获得部分分。
你可能不需要用到这个参数。
这个参数的含义在【数据规模与约定】中有具体的描述。
第2行n个整数p i,表示编号i的城市中驻扎军队的花费。
接下来n−1行,每行两个正整数u,v,表示有一条u到v的双向道路。
接下来m行,第j行四个整数a,x,b,y(a≠b),表示第j个要求是在城市a驻扎x支军队,在城市b驻扎y支军队。
其中,x、y的取值只有0或1:若x为0,表示城市a不得驻扎军队,若x为1,表示城市a必须驻扎军队;若y为0,表示城市b不得驻扎军队,若y为1,表示城市b必须驻扎军队。
输入文件中每一行相邻的两个数据之间均用一个空格分隔。
【输出格式】输出文件名为defense.out。
输出共m行,每行包含1个整数,第j行表示在满足国王第j个要求时的最小开销,如果无法满足国王的第j个要求,则该行输出-1。
【输入输出样例1】见选手目录下的defense/defense1.in和defense/defense1.ans。
【样例解释】对于第一个要求,在4号和5号城市驻扎军队时开销最小。
对于第二个要求,在1号、2号、3号城市驻扎军队时开销最小。
第三个要求是无法满足的,因为在1号、5号城市都不驻扎军队就意味着由道路直接连接的两座城市中都没有驻扎军队。
【输入输出样例2】见选手目录下的defense/defense2.in和defense/defense2.ans。
【数据规模与约定】对于100%的数据,数据类型的含义:A:城市i与城市i+1直接相连。
B:任意城市与城市1的距离不超过100(距离定义为最短路径上边的数量),即如果这棵树以1号城市为根,深度不超过100。
C:在树的形态上无特殊约束。
1:询问时保证a=1,x=1,即要求在城市1驻军。
对b,y没有限制。
2:询问时保证a,b是相邻的(由一条道路直接连通)3:在询问上无特殊约束。