摘要:
不难发现两边的活动是交替进行的,我们可以dp先对时间离散化,设f[i,j]到时间i一个会场选j个活动,另一个会场最多有多少活动,那么f[i,j]=max(f[k,j]+s[k,i],f[k,j-s[k,i]])然后第一问的答案就是max(min(f[n*2,i],i))第二问是要求必选一个,那这一定... 阅读全文
摘要:
很明显是二分图匹配,关键是怎么求字典序最小想到两种做法,首先是直接匹配,然后从第一位贪心调整第二种是从最后一个倒着匹配,每次匹配都尽量选小的,这样一定能保证字典序最小 1 type node=record 2 po,next:longint; 3 end; 4 5 var ... 阅读全文
摘要:
如果是树,那么一定选择树的直径的中点套了个环?裸的想法显然是断开环,然后求所有树的直径的最小值环套树dp的一般思路,先把环放到根,把环上点下面的子树dp出来,然后再处理环上的情况设f[i]表示以i为根的子树向下延伸的最长链长度我们把环上的点扩展一倍,用前缀和维护环上的边权依次枚举断点,则对直径影响就... 阅读全文
摘要:
首先,最短路不同的两辆车一定不会发生堵塞对于最短路相同的点,我们把属于最短路径上的边拎出来建图跑最大流即可然后我TLE了……因为很明显建出来图很大,而真正流的流量很小普通的初始标号都是0的sap在增广的时候编号会非常慢运用fanhq博客里的做法,先用dfs计算图的标号O(m+n),然后再跑sap就跑... 阅读全文
摘要:
做过4010这题其实就水了把图反向之后直接拓扑排序做即可,我们可以用链表来优化每个航班的最小起飞序号就相当于在反向图中不用这个点最迟到哪 1 type node=record 2 po,next:longint; 3 end; 4 5 var e:array[0.... 阅读全文
摘要:
一开始读错题,各种不会做,后来发现染色只是染孩子……那不就简单了吗……注意这题是允许离线的染色如果没有距离限制,它就是个dfs序距离限制怎么做呢?我们考虑扩展一维变成二维的问题,将每个点变为二维平面上的点(x,y),y=d[x]表示x的深度染色a,距离限制l实际上就是对x∈[l,r],y0 do 3... 阅读全文
摘要:
这种题完全可以暴力找规律,暴力打表各种搞法这里有一篇比较全面的题解:http://acm.uestc.edu.cn/bbs/read.php?tid=3698&page=1&toread=1#tpc 1 var f:array[0..1510] of extended; 2 n,m,i,j,... 阅读全文
摘要:
每次做计算几何题都要做好久考虑每个圆对答案的贡献,也就是每个圆被后面圆覆盖还有多少可以把覆盖当成盖住一段弧度,看最后有多少没被覆盖这就相当于线段覆盖问题了,推推公式,算极角然后排序即可md,pascal算极角就是麻烦 1 uses math; 2 const pi=3.1415926535897... 阅读全文
摘要:
显然是类似k短路,直接不停增广即可好久没写A*了,裸的A*可能会TLE加点剪枝就卡过去了……… 1 type node=record 2 po,next:longint; 3 cost:double; 4 end; 5 point=recor... 阅读全文