上一页 1 2 3 4 5 6 7 8 9 10 ··· 13 下一页
摘要: 题意:有N个男孩,N个女孩。每个女孩可以选择一个没有跟他吵过架的男孩结婚。如果女孩X和女孩Y是朋友,且Y没有和男孩Z吵过架,女孩X同样可以选择男孩Z和自己结婚。另外,如果A和B是朋友,B和C是朋友,那么A和C也必定是朋友。一旦所有的女孩都找到了男友,那么他们就可以开始一轮新的游戏了,在每一轮新的游戏中,他们将使用相同的规则进行游戏,但是所有的女孩都不会选择之前选择过的男友了。问他们最多可以进行几轮游戏。可以二分游戏的轮次数。首先做floyd闭包传递,确定女孩i可以与哪些男孩j配对。假设一共可以进行k轮游戏,那么从起点S向每个女孩i连一条边(S,i,k),从每个男孩向汇点T连一条边(i,T,k) 阅读全文
posted @ 2013-10-27 13:29 浙西贫农 阅读(233) 评论(0) 推荐(0) 编辑
摘要: 有两个资源供应,而需求只有一个,把需求拆点,限制容量,放中间,其中一个点跟资源1相连,另外一个点与资源2相连,跑最大流。 1 #include 2 #include 3 #include 4 #include 5 #define INF 1<<30 6 #define maxn 10100 7 #define maxm 1000000 8 using namespace std; 9 10 int v[maxm],next[maxm],w[maxm];11 int first[maxn],d[maxn],work[maxn],q[maxn];12 int e,S,T;13 14 v 阅读全文
posted @ 2013-10-26 19:22 浙西贫农 阅读(130) 评论(0) 推荐(0) 编辑
摘要: 题意:老师要把N颗糖分给M个小盆友,M*N的矩阵中的元素(i,j)表示第i个小孩对第j颗糖的喜好,1表示喜欢,0表示不喜欢。如果一个小朋友得到了一颗糖,并且这颗糖是自己喜欢的糖,他会得到K个glad值,否则,只能得到1的glad值。现在告诉你每个小朋友i的glad值要达到B[i]才会开心,问是否存在一种分配方案使得所有的小朋友都能够开心。(1sum(B[i])是不是成立,如果成立就可以给出一个分配方案。maxflow流的意义是所有孩子被分到喜欢的糖的前提下的最大的glad值之和-这些孩子喜欢的糖的数目,那么再加上所有糖的数目n就是能够总体能够达到最大glad值了。这里,glad值的范围变成了[ 阅读全文
posted @ 2013-10-26 18:27 浙西贫农 阅读(196) 评论(0) 推荐(0) 编辑
摘要: 题意:水面上有很多的圆形区域,他们要么存在相交的区域,要么不存在相交的区域,不会存在相切的情况。每个区域都有颜色,并且告诉你每个区域颜色的频率。现在要求你从唯一的一个红色区域(频率最小)走到紫色区域(频率最大)并从紫色区域返回红色区域。并且必须遵循以下三个规则:(1)从红色走到紫色的时候,必须从频率小的区域走向频率大的区域。(2)从紫色走到红色的时候,必须从频率大的区域走向频率小的区域。(3)除了初始的红色区域,你每离开一个区域的时候,那个区域都会消失。问你是否存在一个合法的方式。这里最关键的问题是要形成回路。首先,如果红色区域跟紫色区域直接相交,那就直接可以判为存在合法方案了。如果不想交,首 阅读全文
posted @ 2013-10-26 12:20 浙西贫农 阅读(553) 评论(0) 推荐(0) 编辑
摘要: 题意:给出一张n个点m条边无向图,问最少删几个点使得原图非连通。无向图不带权的点连通问题。拆点,对每个点i,对应边(i,i',1),对原图中的每条边(i,j),对应两条正向边(i',j,inf),(j',i,inf),选定任意一个源点S',枚举所有汇点T,跑最大流,对最小的最大流ans,如果ans=inf,则答案就是n,否则答案是ans。代码: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #define maxn 110 7 #define inf 1 q; 17 q.push(t); 18 阅读全文
posted @ 2013-10-25 22:09 浙西贫农 阅读(184) 评论(0) 推荐(0) 编辑
摘要: 题意:n(n 2 #include 3 #include 4 #include 5 #define INF 1<<30 6 #define maxn 1100 7 #define maxm 30000 8 using namespace std; 9 10 int v[maxm],next[maxm],w[maxm]; 11 int first[maxn],d[maxn],work[maxn],q[maxn]; 12 int e,S,T; 13 int bit[maxn],count_bit[maxn]; 14 void init(){ 15 e = 0; 16... 阅读全文
posted @ 2013-10-25 10:55 浙西贫农 阅读(226) 评论(0) 推荐(0) 编辑
摘要: 题意:看图就知道大概是个什么意思了,就是每行连续的数之和等于一个规定的数,每列连续的数之和等于一个规定的数。 神题啊。。这都可以是网络流。。貌似也只能是网络流了。。直接搜的题解。。觉得建图也不是那么神奇 但是就是觉得真的不可思议。。首先,流量有下界,是1,那么干脆所有的边的流量都把这个1的部分减掉。直接贴这个博客上说的:http://www.cnblogs.com/ylfdrib/archive/2010/08/15/1799903.html建图:一共有四类点:1. 构造源点S,汇点T2. 有行和的格子,此类节点设为A3. 空白格,设为B4. 有列和的格子,设为C则可以建边:1. 容... 阅读全文
posted @ 2013-10-24 22:37 浙西贫农 阅读(251) 评论(0) 推荐(0) 编辑
摘要: 题意:有N个任务和M台机器。对于每个任务i,它必须在第Si天或之后开始执行,完成这个任务需要Pi天,并且必须在第Ei天或其之前完成。一台机器在同一时间段内只能做一个任务,一个任务在同一时间段内也只能被一台机器执行。任务可以被打断执行,可以在不同的时间在不同的机器上进行。现在给出这些数据,问是否有可行的调度方案。每天每台机器只能完成一个工作量,那么把这个工作量作为流量是比较合理的。题目里面有三个量,时间,机器,任务。注意,根据题意,每台机器每天只能完成一个工作量,我们可以说每天给我M台机器我可以每天完成M个工作量,因此只要保留两个量作为图中的点:天数,任务,图中的流量对应工作量。那么对于所有任务 阅读全文
posted @ 2013-10-24 12:03 浙西贫农 阅读(273) 评论(0) 推荐(0) 编辑
摘要: 题意:给出一个n个数字的序列,求最长上升子序列长度,并求出最多可以找出多少个最长上升子序列(每个位置上的数字只能在找出的序列中出现一次)只能出现一次,还是可以联想到最大流的。而对于一个已经给定了的长度,貌似想控制在网络中的路径长度不太可能。假定每个位置上的当前最长上升子序列的标记为dp(i)。每个流会对应一种物理方案,那么必须是dp(j)=dp(i)+1,(j>i),所以,对于所有的符合条件的i,j,有边(i',j,1)。另外由于是每个数字只可以使用一次,所以肯定对应一条边(i,i',1),对于所有dp(i)=1的点,对应边(S,i,1),对于所有dp(i)=ans的点, 阅读全文
posted @ 2013-10-24 10:13 浙西贫农 阅读(263) 评论(0) 推荐(0) 编辑
摘要: 题意:给出一张F个点P条路径的带权无向图,权值代表走这条路的时间。每个点F上现在有a头牛,而每个点最多可容纳b头牛,问是否存在一种调整方案使得所有的点上存在的牛数少于该点容纳牛数的上限,如果可以,输出最短时间,否则,输出-1。思路:拆点,二分。先做一遍floyd。把每个点拆成i,i',有边(i,i',inf)。二分枚举时间t,如果可以在t时间内从i走到j,那么从i到j’连一条边(i,j',inf)。跑最大流,如果满流(就是maxflow=总牛数),即成立。 1 #include 2 #include 3 #include 4 #include 5 #define INF 阅读全文
posted @ 2013-10-23 16:28 浙西贫农 阅读(199) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 8 9 10 ··· 13 下一页