上一页 1 ··· 10 11 12 13 14 15 16 17 18 ··· 30 下一页
  2012年9月17日
摘要: 递归实现的拓扑排序。constintMAXN=510;intc[MAXN];inttopo[MAXN],t;intG[MAXN][MAXN];intn,m;intdfs(intu){c[u]=-1;for(intv=0;v<n;v++)if(G[u][v]){if(c[v]<0)return0; //存在有向环elseif(!c[v]&&!dfs(v))return0;}c[u]=1;topo[--t]=u;return1;}inttoposort(){t=n;memset(c,0,sizeof(c));for(intu=0;u<n;u++)if(!c[u]) 阅读全文
posted @ 2012-09-17 21:37 有间博客 阅读(617) 评论(0) 推荐(0) 编辑
摘要: 在有向图G中,如果两个顶点间至少存在一条路径,称两个顶点强连通(strongly connected)。如果有向图G的每两个顶点都强连通,称G是一个强连通图。非强连通图有向图的极大强连通子图,称为强连通分量。下图中,子图{1,2,3,4}为一个强连通分量,因为顶点1,2,3,4两两可达。{5},{6}也分别是两个强连通分量: 根据定义,用双向遍历取交集的方法求强连通分量,时间复杂度为O(N^2+M)。更好的方法是Kosaraju算法或Tarjan算法,两者的时间复杂度都是O(N+M)。本文介绍的是Tarjan算法。Tarjan算法是基于对图深度优先搜索的算法,每个强连通分量为搜索树中的一棵.. 阅读全文
posted @ 2012-09-17 20:49 有间博客 阅读(295) 评论(0) 推荐(0) 编辑
摘要: 大意:一些人按照序号排队,有些人相互喜欢,必须在一定的距离之内,而有些人,则必须相距一定的距离。思路:差分约束,注意还有s[i]-s[i-1]>=0这一题目隐含条件,如果有负环则输出-1,如果距离无限远则输出-2,否则d[n];CODE:#include<iostream>#include<cstdlib>#include<cstdio>#include<cstring>#include<queue>usingnamespacestd;constintSIZE=10010;constintINF=0x3f3f3f3f;intu[ 阅读全文
posted @ 2012-09-17 18:05 有间博客 阅读(108) 评论(0) 推荐(0) 编辑
摘要: 大意:国王生了一个傻儿子,只会算从s开始的n个数的和大于或者小于k,他给你一组数据si、ni、ki,让你去判断是否存在这样的序列。思路:建模,差分约束,然后判断是否存在环,并且需要判断图是否连通,而图不一定是连通的,所以我们增加一个超级源点n+1。然后最长路,最短路都行。sn = s[i+1] +s[i+2]+....s[i+ni];Tn = s1+s2+s3+s4+...sn;sn = T[si+ni]-T[si-1] >=k+1;sn = T[si+ni]-T[si-1] <=k-1;差分约束只能求>=或者<=所以要转换为+1或者-1。CODE:#include&l 阅读全文
posted @ 2012-09-17 16:11 有间博客 阅读(235) 评论(0) 推荐(0) 编辑
摘要: 题目大意:给你n个城市,m条道路,以及A城市与B城市之间隧道的限高,让你求最小路径。思路:二分枚举所有的高度,然后通过Dijkstra算法求得最小的路径值。注意:最后的mid不一定是正确的,需要用一个中间变量来保存。我就这错了,于是去改SPFA,改建图,纠结了好久,最后发现是二分写错了。这儿我花了两天的时间间断的找BUG,在师兄的提醒下终于找到了,我二分查找悲剧地写错了,放这提醒自己。CODE:#include<iostream>#include<cstdlib>#include<cstdio>#include<cstring>#include& 阅读全文
posted @ 2012-09-17 13:10 有间博客 阅读(327) 评论(0) 推荐(0) 编辑
  2012年9月16日
摘要: 大意:刘备将营地连在了一起,陆逊想要估计出多少人,所以就侦查到了没个营地的容量Ci,即最多有多少士兵,又估计了一下从i营地到j营地最少有多少士兵,求总共最少有多少人,或者估计有误(出现了正、负环)。思路:建模。s[j]-s[j-1] >= k;s[i]-s[i-1] >= 0;s[i]-s[i-1] <=Ci;CODE:#include<iostream>#include<cstdlib>#include<cstdio>#include<cstring>#include<queue>usingnamespacestd 阅读全文
posted @ 2012-09-16 21:17 有间博客 阅读(173) 评论(0) 推荐(0) 编辑
摘要: 建图:constintSIZE=100010;constintINF=0x3f3f3f3f;intu[4*SIZE],w[4*SIZE],v[4*SIZE],next[4*SIZE]; //一般是4*SIZEintfirst[SIZE],d[SIZE];int sum[SIZE];intn,m;//n个顶点,m条边。memset(first,-1,sizeof(first));voidread_graph(intu1,intv1,intw1){for(inte=0;e<n;e++){scanf("%d%d%d",&u[e],&v[e],&w[e 阅读全文
posted @ 2012-09-16 18:25 有间博客 阅读(1328) 评论(0) 推荐(1) 编辑
摘要: 大意:班长给孩子们分配糖果,其中有些孩子们有一定的要求。CODE:s[i]-s[i-1]<=Ci另外,DISCUSS中:因为是班长做主,所以程序必须是从1号为起点,否则如果以n为起点,那就是爱管闲事的那人做主。(具体原因你可想想单源最短路的更新原理)再举个简单的样例:21 2 52 1 6如果以1为起点得到的答案是5,也就是班长5个糖果,爱管闲事的0个糖果(当然两者可以同时加上任意的正整数)。如果以2为起点,得到的答案是6,也就是班长得0个,爱管闲事的人得6个。虽然6比5大,但是根据题意,分配糖果是班长做主,而他是想惩戒爱管闲事者,所以他肯定会按第一种分配方案分配,所以答案仍旧是5,所以 阅读全文
posted @ 2012-09-16 18:16 有间博客 阅读(174) 评论(0) 推荐(0) 编辑
摘要: 算法简介SPFA(Shortest Path Faster Algorithm)是Bellman-Ford算法的一种优化,减少了不必要的冗余计算。 它可以在O(kE)的时间复杂度内求出源点到其他所有点的最短路径,可以处理负边,但判断负回路不方便。值得注意的是,得到可行解后,可以看成新的约束:xi-xj<=d[i]-d[j],即d[i]为xi-x0的最大值。由此可以看出,SPFA和Bellman-Ford算法解决差分约束系统问题时,实际上是把约束条件强化了,使得满足任意约束条件的值都能构造出一个完整的解。同样的,当约束方程为>=时,求出的xi-xj>=d[i]-d[j],故d[ 阅读全文
posted @ 2012-09-16 17:50 有间博客 阅读(621) 评论(0) 推荐(0) 编辑
摘要: 大意:一群牛排成一队,其中某些牛需要在一定的距离内,而有些则要离开一定的距离。思路:差分约束。s[i]-s[i-1] <= ds[i]-s[i-1]>=ds[i]-s[i-1]>=0如果有环,输出-1,如果N可以无限远,即1与N不连通,输出-2,其他情况输出1与N的最大距离。CODE:#include<iostream>#include<cstdlib>#include<cstdio>#include<cstring>#include<queue>usingnamespacestd;constintSIZE=1000 阅读全文
posted @ 2012-09-16 17:26 有间博客 阅读(215) 评论(0) 推荐(0) 编辑
上一页 1 ··· 10 11 12 13 14 15 16 17 18 ··· 30 下一页