摘要:
【问题描述】 有两个监狱,要关押n个罪犯。两个罪犯直接可能会有怨气值,若这两人在同一个监狱,则会爆发一个事件,事件的影响力等于两个罪犯的怨气值。答案等于所有事件的影响力的最大值,要使答案最小。有m对罪犯有怨气值。 n≤20000,m≤100000【分析】 曾经有大牛说过,一般题目求“最小值的最大值”或“最大值的最小值”的话,都可以用二分做。这句话真心很好用啊! 二分答案,然后构造二分图,即怨气值大于答案的罪犯需在不同监狱,若可以构造则修改右边界,否则修改左边界。总时间复杂度O(n log c)。【代码】 PS:懒得写链表直接用vector存边不要介意。#include <iostre.. 阅读全文
摘要:
【问题描述】 有n个城市和m条道路,道路有双向道路和单向道路。每个城市的水晶球价格不同,商人阿龙要从城市1走到城市n,城市和道路可以经过多次。阿龙可以在一个城市买入一个水晶球,然后在之后经过的城市卖出(最多交易一次)。求出阿龙最多能够获得的利润。 1≤n≤100000,1≤m≤500000【分析】 最简单的想法是遍历全图,找到价格的Max和Min,相减得到答案。但是要保证必须先走到Min的城市,再走到Max的城市,所以这样是不行的。我们可以反向构图,分成正着走到n和倒着走到1,令Min[i] 表示从1开始正着走到i的城市中最小的价格,Max[i]表示从n倒着走到i的城市中最大的价格,则an.. 阅读全文