- 博客(14)
- 收藏
- 关注
原创 POJ 3683 Priest John's Busiest Day (2-SAT)
题意:约翰是区里唯一的神父。有N对新人在同一天结婚,每个婚礼有一个特殊仪式,要有神父参加,时间为Si ~ Si + Di 或者 Ti - Di ~ Ti, 神父只能同时参加一个,问能否合理安排时间使神父参加所有婚礼 思路:由于每个婚礼只有开始和结束两个时间段,选择了一个就不能选择另外一个,这样的话转换为布尔公式就好做了,就转为2 - SAT问题。再进行强连通分量分解,就能得到答案了
2016-10-20 16:49:36 209
原创 POJ 2186 Popular Cows(强连通分量分解)
题意:一些牛仰慕另一些牛,仰慕具有传递性,问受其他所有牛仰慕的牛有多少? 思路:强连通分量,拓扑排序最后的强连通分量才可能是受其他所有牛仰慕的牛,还要反向dfs一次看是不是所有点可达,若有某个点不能到达则没有受其他所有牛仰慕的牛 #include #include #include #include const int maxn = 1e4 + 10; const int IN
2016-10-20 09:55:36 223
原创 HDU 1255 矩形覆盖面积(线段树)
题意:给出若干个矩形,问至少覆盖两次的面积是多少 思路:线段树。。我是直接更新到底,耗时较大,看了网上的200ms能过,我的花了1s,不过代码简洁。。 #include #include #include const int maxn = 2 * 1e3 + 10; using namespace std; struct mt { double l, r, h; in
2016-10-19 20:19:56 482 1
原创 HDU 1542 Atlantis(线段树矩形覆盖)
题意:给出若干个矩形,求出总共的面积 思路:线段树 + 扫描线,从下而上扫描,遇到矩形下边+1(插入新的覆盖线段),否则-1(删除该线段),求出每次覆盖总长度乘以每次的高度差,加起来就是答案 #include #include #include const int maxn = 2 * 1e2 + 10; using namespace std; struct mt {
2016-10-19 19:52:20 265
原创 Uva 10269 Adventure of Super Mario(最短路)
题意:有A个村子B个城堡,1~A为村子,A+1 ~ A + B为城堡,有一双可以使用K次的魔法鞋,可以瞬移,但一次不能超过L米,且不能在路中停下,不能闯过城堡,问1 -> A + B的最短时间。 思路1:dijkstra,设d[u][j][k] : 到达u村(城)时,第j次使用的鞋子距离还剩下k时候的最短路,则有: 1、不使用鞋子:d[v][j][k] = min{ d[v][j][k
2016-10-18 20:26:36 300
原创 UVA 1306 The K-League (最大流)
题意:有n支球队进行比赛,每只队伍需要打的比赛数目相同。每场比赛恰好一支队伍胜,另一支败。给出每支队伍目前胜的场数和败的场数,以及每两个队伍还剩下的比赛场数,确定所有可能的冠军的球队(获胜常数最多的的冠军,可以并列)。 思路:让i在所有队伍中取胜,设总共赢的场数为sum,那么剩下的队伍j最多只能赢sum - w[j],建立附加源点汇点,u,v之间有比赛的话,建立一个比赛节点,比赛节点连向
2016-10-16 10:27:20 411
原创 Uva 11248 Frequency Hopping(最大流)
题意:给定一个有向网络,每条边均有一个容量。问是否存在一个从点1到点N,流量为C的流。如果不存在,是否可以恰好修改一条弧的容量,使得存在这样的流。 思路:先跑一次最大流,如果结果 >= C那么结果是可行的,否则,如果存在某条边满足条件,那么那条边一定是割边,再对求完最大流后的割边枚举,看条件是否满足, 再次求最大流的时候需要保存第一次求完最大流后的结果 #include #i
2016-10-15 13:58:22 368
原创 LA 3231 Fair Share(网络流 + 二分)
题意:m个任务n个处理器,一个任务只能在可供运行的两个机器中的其中一个上运行,问怎样分配使得任务最多的机器尽量少 思路:把任务和可以选择的机器连边,容量为1,建立源点汇点s, t,s到每个任务的容量为1,对于机器到汇点的容量二分答案 #include #include #include #include #include #include const int maxn = 2 *
2016-10-14 17:03:14 398
原创 HDU 1960 Taxi Cab Scheme(最小路径覆盖)
题意:给出m个人坐出租车的出发时间,出发点和到达点,出租车在客人出发前至少1分钟需要到达出发点等待客人,问最少需要多少辆出租车 思路:明显的最小路径覆盖,而时间是一个天然的序,建立二分图,求出最大匹配,二分图顶点数 = 最大匹配 + 最小路径覆盖 #include #include #include #include #include const int maxn = 510;
2016-10-13 11:35:58 300
原创 POJ 2771 Guardian of Decency(最大独立集、二分图匹配)
题意:老师要带一些人出去,要求这里面任何两个人之间不会萌生爱意 思路:有某种关系的人相互连边,很明显就是求最大独立集,而这里只有男生女生两种,故这是二分图匹配问题,因为二分图中,最大独立集 + 最小顶点覆盖 = 顶点数 直接套匈牙利算法模板就行 #include #include #include #include #include #include #include con
2016-10-12 20:55:10 248
原创 Uva 1411 ants(KM算法--二分图最佳完美匹配)
题意:给出若n个白点和n个黑点,要求用n条线段链接并使这些线段不相交 思路:想了许久没想出来,看了刘汝佳的训练指南题解。如果两条线段a1-b1,a2-b2相交,那么他们的距离之和一定大于a1 - b2, a2 - b1,所以如果有相交的线段的话不符合二分图最佳匹配的原则,所以最佳匹配中不会出现线段相交的情况,设初始值为距离的相反数就好了,这样就选择的最佳匹配满足条件,直接KM模板可过
2016-10-11 21:11:18 506
原创 LA 1384 Stream My Contest(树形图 + 二分)
题意:你需要花费不超过cost元来搭建一个比赛网络,网络中有n台机器,编号0~n-1,其中机器0为服务器,其他机器为客户机。一共有m条可以使用的网线,其中第i条网线的发送端是机器ui,接收端是机器vi(数据只能从机器ui单向传输到机器vi),带宽是bi Kbps,费用是ci元。每台客户机应当恰好从一台机器接收数据,你的任务是最大化网络中的最小带宽。 思路:二分kbps建立树形图看是否满足
2016-10-10 20:04:02 519
原创 Uva 11354(并查集 + LCA)
#include #include #include #include #include #include const int maxn = 5 * 1e4 + 10; const int INF = 1e9 + 10; using namespace std; struct P { int u, v, d; P() {} P(int u, int v, int d) :
2016-10-10 12:41:45 295
原创 Uva 1078 Steam Roller(多状态最短路)
题意:有一个n条竖线m条横线组成的网络,你的任务是开着一辆蒸汽压路机,用最短的时间从一个点到另一个点,其中一些线段上的权值表示压路机全速前进所用的时间,0表示不能通过,由于蒸汽机的惯性较大所以在转弯前和转弯后那条边所走的实际速度都是全速前进速度的两倍。开始后和结束前的边也是两倍。时间加倍的规则是不会叠加的。最后给你两个顶点求最短路。 思路:设d[i][j][k][l] : 沿着第k(1 显然
2016-10-01 17:09:31 386
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人