Test 17

BZ OI 队测

T1:

题目大意:

喵星系有n个星球,标号为1到n,星球以及星球间的航线形成一棵树。

所有星球间的双向航线的长度都为1。小昕要在若干个星球建矿石仓库,设立每个仓库的费用为K。对于未设立矿石仓库的星球,设其到一个仓库的距离为i,则将矿石运回的费用为Di。

请你帮它决策最小化费用。n<=200

题解:开始的时候第一眼DP,可是不知道设状态,后来感觉是网络流,但是发现对于仓库哪里无法限流,于是在纠结很久的情况下

   想到正解:Tree DP

   设一个状态F(x,y)代表第x个点,在y处有个未建仓库,于是对于一个点U和它的子节点V我们可以这样转移:

   枚举1--n中的F[V][I]+k的最小值存为Mn,在一次枚举1--n如果F[V][i]>=Mn 那么F(U,i)+=Mn else F(U,i)+=F(V,i)

   因为如果F(V,i)>=Mn的话我们完完全全可以新建一个节点,可是这样为什么能保证一个节点新建的费用只算了一次?

   那是因为对于建一个仓库它会更优,那么到达它的将是一段连续的点对,那么因为F(U,i)+=F(V,i),这些点对先会被统计于一个节点

   再由这个节点被转移+K,于是保证答案正确性!



T2

题目大意:

小奕和小晟正准备下个周末的Party。为这个Party,他们刚刚买了一个非常大的圆桌。他们想邀请每个人,但他们现在不知道如何分配座次。小奕说当有超过K个女孩座位相邻(即这些女孩的座位是连续的,中间没有男孩)的话,她们就会说一整晚的话而不和其他人聊天。 小晟没有其他选择,只有同意她。然而,作为一名数学家,他很快地痴迷于所有可能方案。 题目说明: N个人围绕着圆桌坐着,其中一些是男孩,另一些是女孩。你的任务是找出所有合法的方案数,使得不超过K个女孩座位是连续的。 循环同构会被认为是同一种方案。

题解:http://files.cnblogs.com/files/HQHQ/%E8%A7%A3%E9%A2%98%E6%8A%A5%E5%91%8A_ipsc2008_largeparty.pdf

神犇题解:http://www.cnblogs.com/DUXT/p/5958205.html



T3

题目大意:

下水道的主干路由n个节点和n-l条边组成,每条边有一个通过它所需的时间Ti。换言之,这是一棵n个节点的带权

树。现在,要用最快的速度赶往目标节点k。下水道有一些塌陷,这导致主干路的某一段路径可以通过该塌陷到另

一条路径。对于一个塌陷,我们用(L1,ri,L2,R2,c)来描述,即对于主干路上L1到R1路径上的任意节点x,L2到

r2路径上的任意节点y,都可以在c的时间内从x走到y。因为不知道自己所在的到底是哪个节点,所以要求出每个节

点到目标节点K的最短距离。注意边是单向的

题解:

  1.对于前20分,m、n<=1000

   我们如果暴力建图+spfa是可以(慢慢水过)的,于是我们我们考虑一下建一个中转点K,对于两段要联接S1,S2我们

   可以先将S1中的点向K连边权为0的边,在由K向S2连边权为C的边,这样点数与边数就被缩小为O(n)级别。

  2.考虑另外20分,一条链我们怎么作?

   一条链+区间操作显然可以想到线段树这类区间维护结构,于是我们可以利用线段树上的log个点进行区间连边操作

   于是问题得到解决!

  3.一颗树怎么办?树和链是没有区别的,因为我们有树链剖分,直接剖分即可,我们可以建两颗线段树,一个由底层向上

   依次连边,一个由上到下依次连边,于是我们只要在两颗线段树中进行区间连边(如操作1)操作!

时间: 2024-07-29 06:43:24

Test 17的相关文章

AnimeGAN输出日志

D:\MyFiles\LearnFiles\Code\Python\AnimeGAN\AnimeGAN>python main.py --phase train --dataset Hayao --epoch 1 --init_epoch 1D:\Users\feng_\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow\python\framework\dtypes.py:516: FutureWarning:

[c/c++] programming之路(17)、高级指针

一.二级指针 二级指针的作用:1.函数改变外部变量指针2.外挂改变一个指针的值 1 #include<stdio.h> 2 #include<stdlib.h> 3 4 void main(){ 5 int a = 10; 6 int b = 20; 7 int *p1 = &a; 8 int *p2 = &b; 9 int **pp = &p1; 10 printf("%d,", **pp); 11 printf("\n%x,

java核心技术 - 17个重要的知识点

1.Java中没有多继承,而是用接口来代替多继承 2.运行一个已经编译的程序时,Java解释器总是从指定类的main方法中的代码开始执行,因此,执行代码中必须有一个main函数. 3.Java是典型的强类型语言,即必须声明变量的类型,Java中有8种类型,6种数值类型(4个整数型和2个浮点型).一个字符类型和一个boolean类型. 想学习java可以来这个群,首先是二二零,中间是一四二,最后是九零六,里面有大量的学习资料可以下载. 4.强制类型转换: int nx = (int) x; //

Up to 8% free bonus for runescape 2007 gp on Rsorder as july best gift&Enjoy Telos During 7.1-7.22

Now, a small band of freedom fighters struggle to end the osrs gold  long, dark night of Daein's oppression. The big blog news of the day is that Vox Media has acquired Curbed Network. As an amulet you should be wearing an amulet of glory and if you

PSP(5.11——5.17)以及周记录

1.PSP 5.11 14:30 20:00 130 200 Cordova A Y min 5.12 9:00 14:00 100 200 Cordova A Y min 5.13 13:30 15:00 20 70 软件项目管理课 A Y min 19:00 20:00 20 40 Cordova A Y min 5.17 11:00 19:00 240 240 Cordova A Y min 2.PSP分类统计以及圆饼图 分类 A B C D 时间总计 750 0  0 0     3.周

TControl的消息覆盖函数大全(15个WM_函数和17个CM_函数,它的WndProc就处理鼠标与键盘消息)

注意,这些函数只有Private一种形式(也就是不允许覆盖,但仍在动态表格中): TControl = class(TComponent) private // 15个私有消息处理,大多是鼠标消息.注意,消息函数大多只是一个中介,且TWinControl并不重写. procedure WMNCLButtonDown(var Message: TWMNCLButtonDown); message WM_NCLBUTTONDOWN; procedure WMLButtonDown(var Messa

【面试题17】合并两个排序的链表

[题目描述] 输入两个递增排序的链表,合并这两个链表并使新链表中的结点是按照递增排序的. [解决方案] 用递归解决,非常简单. 我的代码实现,仅供参考: 1 public static ListNode Merge(ListNode listA, ListNode listB) 2 { 3 if (listA == null) 4 { 5 return listB; 6 } 7 else if(listB == null) 8 { 9 return listA; 10 } 11 12 ListN

Leetcode -- Day 17

substring Question 1 Implement strStr() Implement strStr(). Returns the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack. Below is my first direct solution, which looks complex in different case checking us

17.如何自学Struts2之Struts2 Annotation注释[视频]

17.如何自学Struts2之Struts2 Annotation注释[视频] 之前写了一篇"打算做一个视频教程探讨如何自学计算机相关的技术",优酷上传不了,只好传到百度云上: http://pan.baidu.com/s/1kTDsa95 有问题可以直接回复这篇文章.

Android学习系列(17)--App列表之圆角ListView(续)

http://www.cnblogs.com/qianxudetianxia/archive/2011/09/19/2068760.html 本来这篇文章想并到上篇Android学习系列(16)--App列表之圆角ListView中的,但是若是如此就让大家错过一篇新的好的文章,着实可惜.上篇中我们使用shape,corners,gradient实现了一个渐变的圆角效果,但是在完文之后的实践中,我发现有时效果不甚满意,选中和放手的事件监听没有去正确的判断,然后渐变效果也比较单一,性能也觉得不是很快