上一页 1 ··· 3 4 5 6 7 8 9 10 11 ··· 17 下一页
摘要: Dancing Links 重复覆盖问题~题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3498这两天学习了Dancing Links ,它主要对搜索的优化,尤其对于矩阵, 进行深搜的时候,随着层数的加深,矩阵会越来越稀疏,如果还是用一般的遍历的话,时间还是没变,还是遍历整个矩阵, 因为矩阵已经变稀疏了,这样做很显然的浪费时间,这里用到Dancing Links,相信它优美的舞步,一定能打动你的。。Dancing Links用到一个十字链表, 众所周知 链表对于插入和删除的处理 时间复杂度都是O(1), 这里就要用到链表的这一特性,对矩阵的某一 阅读全文
posted @ 2011-08-07 08:55 奋斗青春 阅读(568) 评论(0) 推荐(0) 编辑
摘要: 点双联通 + 二分图染色~~这道题做了有两天了,因为点双联通一直写不对,昨天就又花了一些时间看了下割点,块,割边,缩点,今天在贡献了n次wa后终于AC了,泪奔~~题目大意:有n个骑士,有m对憎恨关系,现在要选择一些骑士(奇数个)围着一个圆桌坐下来,相邻的骑士之间不能相互憎恨,问有多少个骑士永远不可能入座!!思路:先建图,相互补憎恨的骑士之间连一条边,之后问题就转化成求那些骑士永远也不可能在一个奇圈内,先求块, 把图化成很多的块,然后在一个块中判断是否会存在奇圈。如果存在奇圈,则块中所有的点都可以在一个奇圈内。这里用二分图来判断块中是否含有奇圈,因为如果存在奇圈的话,则该块所构成的图一定不是一个 阅读全文
posted @ 2011-08-05 10:42 奋斗青春 阅读(444) 评论(0) 推荐(0) 编辑
摘要: 一道简单的Trie树,好长时间没写过了,手生了,wA了好几次...Message FloodTime Limit:1500MS Memory Limit:65536KTotal Submit:467 Accepted:93Description Well, how do you feel about mobile phone? Your answer would probably be something like that "It's so convenient and benefits people a lot". However, If you ask Mer 阅读全文
posted @ 2011-08-04 19:45 奋斗青春 阅读(499) 评论(2) 推荐(0) 编辑
摘要: 强连通~~题目大意:给一个有向图,问该图是否满足以下两个条件:1.它是一个强连通图。2.它的每一条边仅属于一个环。如果满足输出YES,否则输出NO思路:刚开始想着如果一个点产生两次松弛,则存在边属于至少两个环,结果发现因为有边已经入队列,不能完全的松弛。。。再一想,如果一个点已经入队,又访问到该点并且该点不是一个根节点,则必会存在一条边至少属于两个环。代码:View Code 1 # include<stdio.h> 2 # include<string.h> 3 # define N 20005 4 # define M 50005 5 # include<st 阅读全文
posted @ 2011-08-04 10:19 奋斗青春 阅读(1407) 评论(2) 推荐(0) 编辑
摘要: 最近公共祖先问题~~题目大意:一个村子里有n个房子,这n个房子用n-1条路连接起来,接下了有m次询问,每次询问两个房子a,b之间的距离是多少。很明显的最近公共祖先问题,先建一棵树,然后求出每一点i到树根的距离dis[i],然后每次询问a,b之间的距离=dis[a]+dis[b]-2*dis[LCA(a,b)];LCA(a,b)即是a,b的最近公共祖先。。关于最近公共祖先,给大家推荐一个我学长的博客http://www.cnblogs.com/ylfdrib/archive/2010/11/03/1867901.html,里面讲的很不错!!直接贴一下代码:View Code 1 # includ 阅读全文
posted @ 2011-08-03 20:06 奋斗青春 阅读(3056) 评论(0) 推荐(0) 编辑
摘要: 哎,写了差不多两天了,终于A了。。双联通分量+并查集。。题目大意:给一个连通的无向图,问每加进来一条边,图中还有多少桥!思路:刚开始想都没想,直接就写,每加进来一条边然后进行缩点,写到每加一条边然后重新建图的时候打住了,每加一条边要进行缩点,还要重新建图,太麻烦了,,搞了很久还是写出来了,交上去OLE了,搜了一下解题报告, 人家说这种方法会超时,然后果断不写了。。又看了一下discuss里面有人介绍到LCA最近公共祖先,又花了一上午时间把这个学学,之后再来做这道题,,发现方法不实用,我学的那个需要离线处理,也就是先把数据输入进去完,对于这道题,每加一条边都要进行缩点,那种离线方法根本无法解。。 阅读全文
posted @ 2011-08-03 16:13 奋斗青春 阅读(871) 评论(0) 推荐(0) 编辑
摘要: 双联通缩点+树形DP~~前些天做树形DP的时候就发现这道题了,那时候没学双联通不知道怎么样缩点,这两天又把tarjan学了一下,先学习用tarjan解决强联通,之后感觉用tarjan解决双联通与强联通有类似之处,今天早上终于把双联通缩点学会了。。^_^。。。题目大意:给一个教室群,问能不能把这些教室群分成两部分,并且使两部分之间的权值差最小(每一个教室都有一定的权值);思路:先用双联通进行缩点,因为那些双向连通的教室肯定是分不开的,所以要把它们缩成一个点。之后再重新建图,用树形DP一下求最小差值!需要注意一点这道题的数据包含重边,需要考虑!!代码:View Code 1 # include&l 阅读全文
posted @ 2011-08-02 11:33 奋斗青春 阅读(1153) 评论(0) 推荐(2) 编辑
摘要: 双连通分量。题目大意:给出一个连通图,求至少添加多少条边,使得对于任意亮点,不只一条路。即两点间的路去掉一条边还是连通的。思路:用双联通缩点,然后求出度为一的双连通分量的个数count1,最后(count1+1)/2即是所求!!这个题基本上算是我接触双连通的第一道题,写了好多个版本,最后还是稍微了理解了一些双联通。。双连通分量的tarjan用不用栈都可以,因为它不会存在横向边,不需要考虑下一个点是否在栈中。。if(low[u]==dfn[u]){count++;do{v=S.top();S.pop();vis[v]=0;Belong[v]=count;}while(v!=u);}用栈的话可以很 阅读全文
posted @ 2011-08-02 10:50 奋斗青春 阅读(313) 评论(0) 推荐(0) 编辑
摘要: 强联通+拓扑排序判断~~题目大意:给定一个有向图,问该图是不是半连通图.所谓半连通图即是指 在连通图中任意给出两个点a,b,要保证至少存在一条从a到b,或者从b到a的边。解题思路:先用强联通进行缩点,之后再重新建图,再用拓扑排序进行判断:当某一时刻存在两个或两个以上入度为0的点则输出No,否则输出Yes!为了学习双联通不得不学习了tarjan,先用tarjan把这个题给A了。之后不太过瘾,又用Kosaraju给A了下,结果发现Kosaraju要比tarjan更快。。很神奇。。可能是因为我写的tarjan太丑陋了!! 或者是我写的Kosaraju更风骚一点。。 ^_^。。 不过我感觉还是后者比较 阅读全文
posted @ 2011-08-01 17:12 奋斗青春 阅读(1588) 评论(0) 推荐(0) 编辑
摘要: 题目大意:给定一个N*N的方格,让你在里面取出一些数使其和最大,要求每一个数不能与其相邻的8个数同时取出~~很明显的二进制 状态压缩DP~~先求出每一行有效的状态(即不能同时取出相邻的两个)有1597种,我第一次就根据这直接进行了DP,DP[i][j]=max(DP[i-1][h])+sum(j);DP[i][j]表示第i行的第j种状态,DP[i-1][h]表示第i-1行的第h中状态,sum(j)表示第i行在j状态下取出的数之和!此时j和h要满足一定的条件。j中的每一个1不能与h中每一个1相邻,或对角相邻!不过这样做,最后超时了。。我想了一下,感觉每一行要进行1600*1600次循环外加一些判 阅读全文
posted @ 2011-07-31 15:30 奋斗青春 阅读(753) 评论(0) 推荐(1) 编辑
上一页 1 ··· 3 4 5 6 7 8 9 10 11 ··· 17 下一页