摘要:
田忌赛马大家都知道吧,这题就是用了这个思想。 设浙江队的实力值为a数组,对手的实力值为b数组。 首先,把两个数组从小到大排序。 如果a中最小的一个比b中最小的一个大,那就让他们两个打。 如果a中最大的一个比b中最大的一个大,那就让他们两个打。 如果二者都不是就让a中最小的一个和b中最大的一个打,注意 阅读全文
摘要:
裸的最小割,直接上Dinic算法。结果跑得很慢。 阅读全文
摘要:
如果A认为B是受欢迎的,B认为C是受欢迎的,C认为A是受欢迎的,这时形成了一个环。 这时如果A认为D是受欢迎的,那么B和C也认为D是受欢迎的。 于是要考虑缩点。为了好打邻接表用了vector代替。推荐用Tarjan或者Gabow算法。 缩点完最终只有可能有一个强连通分量的牛被全部牛认为是受欢迎的,或 阅读全文
摘要:
一条从S到T的路径的答案为MAX/MIN。 无法直接获得最优解。 所有边按边权从大到小排序,从大到小枚举MIN,要MAX尽量小。 问题变成给你i条无向边,使S与T联通且使边权的最大值最小。 这不就是最小生成树的性质吗?Kruskal算法。 从后往前枚举每一条边,如果边连接的两个节点不在同一集合,就合 阅读全文
摘要:
树形动态规划,记忆化搜索实现。 以校长为根建立一棵树。 f[i][0]表示第i个人不去参加,以他为根的子树的最大快乐指数。 f[i][1]表示第i个人去参加,以他为根的子树的最大快乐指数。 f[i][0]=∑max(f[j][0],f[j][1])(j是i的下属) f[i][1]=∑f[j][0]( 阅读全文
摘要:
非常明显的广搜,但是为了方便判重,就用了状态压缩来优化。 虽然代码比较烦,不过逻辑倒是清晰的。可以用宏定义来简化代码。 阅读全文
摘要:
单调队列维护单调递增或递减。 以求最大值为例,先可以扫描每一行,求出每个数向前n个数的最大值,第i行第j列向前n个数的最大值记为max[i][j]。 如果有一行中后面的数比前面大,那么前面比它小的数已经没有用了,就把它从队列中弹出。 然后再从第n列开始向后扫描每一列,就可以求出每个n*n矩阵的最大值 阅读全文