上一页 1 2 3 4 5 6 7 8 ··· 30 下一页
  2012年11月1日
摘要: 鉴于网上讲交叉染色的资料比较少,于是我把我自己的心得与方法贴出来,方便与大家共同进步。二分图:百度百科传送门wiki百科传送门判断一个图是否为二分图可以用交叉染色的方法来判断,可以用BFS,也可以用DFS,这里我用使用DFS来实现。思路:任意取一个点进行染色,如果发现要涂某一块时这个块已经被涂了色,并且与我们要使用的颜色不同的话,就说明这个图不能被染成BICOLORABLE的。(1)如果没有染色,将它染色,并将它周围的点变成相反色。(2)如果已经染色,判断是否与现在染色的点的颜色相同,相同,则退出,否则继续。附上例题:UVA 10004 BicoloringCODE:/*ProblemVerd 阅读全文
posted @ 2012-11-01 21:24 有间博客 阅读(597) 评论(0) 推荐(0) 编辑
  2012年10月31日
摘要: 题意:给定一个无向连通的公路网,当某些公路路段检修的时候可能会由于该段公路不通,可能会使某些旅游点之间无法通行,求最少需要新建多少条公路,使得任意对一段公路进行检修的时候,所有的旅游景点之间仍然畅通。思路:构造双连通图,具体步骤:[构造双连通图]一个有桥的连通图,如何把它通过加边变成边双连通图?方法为首先求出所有的桥,然后删除这些桥边,剩下的每个连通块都是一个双连通子图。把每个双连通子图收缩为一个顶点,再把桥边加回来,最后的这个图一定是一棵树,边连通度为1。统计出树中度为1的节点的个数,即为叶节点的个数,记为leaf。则至少在树上添加(leaf+1)/2条边,就能使树达到边二连通,所以至少添加 阅读全文
posted @ 2012-10-31 22:25 有间博客 阅读(258) 评论(0) 推荐(0) 编辑
摘要: POJ 2762 Going from u to v or from v to u?题意:有n个山洞m条路,问任意两点x,y能否存在从x到y或者从y到x。思路:1、注意是或而不是和,所以“缩点”后,由于“缩点”内的点相互可达,所以不需要管“缩点”内的点。注意,不是判断强连通的数量为1,而是判断是否是弱连通。2、如果两点不可达那么在拓扑排序时,该两点谁也不是谁的前驱和后继,所以在拓扑排序时只要同时出现至少两个入度为0的点,那么这些点一定互不可达,所以只要判断拓扑的方式是否唯一即可。第一种方法:只要用拓扑判断入度为0的点是否为1个,如果有多个,就出现在分叉,不可能从x到y。第二种方法:从入度为0的 阅读全文
posted @ 2012-10-31 11:33 有间博客 阅读(424) 评论(0) 推荐(0) 编辑
  2012年10月30日
摘要: 大意:第一问:最小的数量需要收到复制软件从而使得所有学校都有软件。(You are to write a program that computes the minimal number of schools that must receive a copy of the new software)第二问:建立最小数量的“路”,使得任意的学校两两可达。思路:第一问,“缩点”之后判断入度为0的强连通分量。第二问,与Hdu 2767很相似,求连接最小的路使得图变为强连通图。判断入度0与出度为0的最大值。CODE:#include<iostream>#include<cstdlib 阅读全文
posted @ 2012-10-30 17:19 有间博客 阅读(174) 评论(0) 推荐(0) 编辑
摘要: 大意:给你一个图,让你使用数量最小的边使得图变成强连通图。思路:我们发现如果图是强连通的,那么每一个顶点的出度与入度必定不为0。所以我们可以将图“缩点”,然后去统计出度或者入度为0的点,取两者的最大数。(可以手推一遍)CODE:#include<iostream>#include<cstdlib>#include<cstdio>#include<cstring>usingnamespacestd;#defineMAXN50010#defineMAXM100010structEdge{intv,next;}edge[MAXM];intfirst[M 阅读全文
posted @ 2012-10-30 16:31 有间博客 阅读(238) 评论(0) 推荐(0) 编辑
  2012年10月29日
摘要: 根据题意求的是出度为0的强连通分量的点的个数,这与POJ 2186有非常相似的地方,因为入度不方便统计,所以直接统计出度,出度为0即为正确答案。思路:利用Tarjan求强连通分量,并求出入度为0的强连通分量。另外,题目要求输出从小到大,而我们知道Tarjan求强连通分量的顺序就是从小到大,所以不需要记录、排序然后输出。CODE:#include<iostream>#include<cstring>#include<cstdio>#include<cstdlib>usingnamespacestd;#defineMAXN10010#defineMA 阅读全文
posted @ 2012-10-29 22:06 有间博客 阅读(158) 评论(0) 推荐(0) 编辑
摘要: 大意:牛牛之间互相喜欢,而且这种喜欢具有传递性,要求你求出最受欢迎的牛牛们的个数(A single integer that is the number of cows who are considered popular by every other cow.)思路:通过“缩点”之后,然后求强连通分量出度的个数,如果为一,那么求出这个“缩点”里所有牛牛的个数。如果大于一,没有符合条件的,手推一遍即可证实。CODE:#include<iostream>#include<cstring>#include<cstdio>#include<cstdlib&g 阅读全文
posted @ 2012-10-29 21:16 有间博客 阅读(188) 评论(0) 推荐(0) 编辑
  2012年10月28日
摘要: 强连通分量Tarjan模板,明天再来理解下。顺便学学二分图匹配,最小割,最大流等,接触了大概有一个多月了,看了好久的论文,不过大部分都没实现过。CODE:#include<iostream>#include<cstring>#include<cstdio>#include<cstdlib>usingnamespacestd;#defineMAXN10010#defineMAXM100010structEdge{intv,next;}edge[MAXM];//边结点数组intfirst[MAXN],stack[MAXN],DFN[MAXN],Low 阅读全文
posted @ 2012-10-28 22:35 有间博客 阅读(227) 评论(0) 推荐(0) 编辑
摘要: 大意:让你求城市与城市之间可到达路径的条数。思路:Floyd变形,需要对Floyd有深刻的理解。题目的关键在于确定是否有无环。首先通过Floyd预处理,把所有的路径数求出来,即d[i][j]+= d[i][k] * d[k][j]。然后确定有无环,如果存在环的话,即d[k][k] != 0(存在环),那么所有的点i,j,只要经过了k(i->k->j),那么它的路径数是不能确定的,反之,确定。CODE:#include<iostream>#include<cstdlib>#include<cstdio>#include<cstring> 阅读全文
posted @ 2012-10-28 17:04 有间博客 阅读(163) 评论(0) 推荐(0) 编辑
摘要: 大意:让你求一个城市到另一个城市的路径的条数。思路:Floyd变形,关键是确定有无环。首先通过Floyd预处理,把所有的路径数求出来,d[i][j]+= d[i][k]*d[k][j],然后确定有无环,如果存在环的话,即d[k][k] != 0(存在环),那么所有的点i,j,只要经过了k(i->k->j),那么它的路径数是不能确定的,反之,确定。CODE:#include<iostream>#include<cstdlib>#include<cstdio>#include<cstring>usingnamespacestd;#defi 阅读全文
posted @ 2012-10-28 16:57 有间博客 阅读(175) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 8 ··· 30 下一页