摘要: 题意:有 n 座城市和 m 条有向边,现在要把这 n 座城市分成一些洲,要求: 如果城市 u,v 之间可以互达则两座城市要分在一个洲里面, 每个洲里面的任意两个城市 u,v之间至少需要存在一条边,问做少能够分成多少个洲。分析:先求强连通分量并进行缩点,重新建图,如果两个强连通分量之间如果存在一条边连接其中一个强连通分量内部的一个点和另一个强 连通分量内部的一个点则连一条边从第一个强连通分量到第二个强连通分量,求出最小路径覆盖即为答案。#include<stdio.h>#include<string.h>#define clr(x)memset(x,0,sizeof(x) 阅读全文
posted @ 2012-10-01 21:07 'wind 阅读(453) 评论(0) 推荐(0) 编辑
摘要: 题意: 已知有 n个农场,知道了每个农场的坐标,有两个中转站 s1,s2,每个农场和其中一个中转站相连, 有 A 对hate关系 a,b 表示 a 和 b 农场不能和同一个中转站相连,有B对Fs 关系a,b 表示 a和 b农场必须和同一个中转站相连, 求一种连接方案,在满足条件 A,B的条件下,图中任意两个农场的最大距离最小。分析:i表示第 i 个农场和中转站 s1 相连,i + n 表示第 i 个农场和中转站 s2 相连, 建图: 在 A 条件中,对于每对关系i , j 连边i-> j + n i + n ->j j ->i + n j + n ->i表示 i 和 j 阅读全文
posted @ 2012-10-01 14:49 'wind 阅读(164) 评论(0) 推荐(0) 编辑
摘要: 题意:已知有 2*n把钥匙,这些钥匙两两一组,每组只能用其中的一把钥匙,有 m 个门,每个门上有两把锁,只要有一把锁被打开门就可以被打开, 一个门上可能是两把相同的锁,不同的门上也有可能有相同的锁,给出门的顺序,问最多可以打开多少扇门。分析: 每种钥匙都有两种状态,用 or 不用, kn = 2*n i 表示 第 i 把钥匙被用,i + kn 表示 不用第 i 把钥匙, 在给出的要是分组中的 i , j 连边 i - > j + kn j->i+ kn 表示 如果用 i 钥匙则 j 钥匙不能用,如果用 j钥匙则 i 钥匙不能用 2 分枚举要开的前 k 个门,对于每个门上的两把锁 i 阅读全文
posted @ 2012-10-01 13:15 'wind 阅读(167) 评论(0) 推荐(0) 编辑
摘要: 题意:有 n对新人结婚,只有一个牧师,知道了每个婚礼的开始时间 s,和结束时间 t 和需要牧师的主持时间 las,牧师可以选在在[s,s+las]或[t-las,t]两个时间段内主持,问是否存在一个时间安排,使得所有新人都可以得到牧师的主持。分析: 每一个婚礼主持时间都是两种状态,每个婚礼之间的时间可能会互相限制,可以用2-sat判断是否冲突。建图: 每个婚礼的两个时间段 i = [s,s+las],i +n= [t-las,t] 如果 i 和 j 冲突,建边 i -> j + n 如果 i 和 j + n 冲突,建边 i -> j 如果 i + n 和 j 冲突,建边 i + n 阅读全文
posted @ 2012-10-01 10:40 'wind 阅读(201) 评论(0) 推荐(0) 编辑