上一页 1 ··· 5 6 7 8 9 10 11 12 13 ··· 18 下一页
摘要: Tarjan 它好贱,wa了10+次。。。 思路:用“它贱”进行强连通缩点。然后统计缩点后的图中入度为0的点的个数in和出度为0的点到个数out。A就是in, B就是max(in, out);渣代码:View Code 1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 4 #include <stack> 5 6 using namespace std; 7 8 const int N = 110; 9 10 struct node {11 int to;12 int n 阅读全文
posted @ 2012-02-11 14:59 AC_Von 阅读(242) 评论(0) 推荐(0) 编辑
摘要: 转载自:http://hi.baidu.com/lydrainbowcat/blog/item/2194090a96bbed2db1351de8.html基本概念:1.割点:若删掉某点后,原连通图分裂为多个子图,则称该点为割点。2.割点集合:在一个无向连通图中,如果有一个顶点集合,删除这个顶点集合,以及这个集合中所有顶点相关联的边以后,原图变成多个连通块,就称这个点集为割点集合。3.点连通度:最小割点集合中的顶点数。4.割边(桥):删掉它之后,图必然会分裂为两个或两个以上的子图。5.割边集合:如果有一个边集合,删除这个边集合以后,原图变成多个连通块,就称这个点集为割边集合。6.边连通度:一个图 阅读全文
posted @ 2012-02-10 11:10 AC_Von 阅读(1316) 评论(0) 推荐(0) 编辑
摘要: 转载自:http://www.byvoid.com/blog/scc-tarjan/zh-hans/[有向图强连通分量]在有向图G中,如果两个顶点间至少存在一条路径,称两个顶点强连通(strongly connected)。如果有向图G的每两个顶点都强连通,称G是一个强连通图。非强连通图有向图的极大强连通子图,称为强连通分量(strongly connected components)。下图中,子图{1,2,3,4}为一个强连通分量,因为顶点1,2,3,4两两可达。{5},{6}也分别是两个强连通分量。直接根据定义,用双向遍历取交集的方法求强连通分量,时间复杂度为O(N^2+M)。更好的方法是 阅读全文
posted @ 2012-02-10 11:07 AC_Von 阅读(400) 评论(0) 推荐(0) 编辑
摘要: 奇数时一定有结果,偶数时一定没有。。。然后循环就可以了。ps:好几天没做题,有点手生了。。。View Code 1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 4 5 using namespace std; 6 7 8 int main() { 9 // freopen("data.txt", "r", stdin);10 11 __int64 n, tmp;12 int i;13 while(~scanf("%I64d" 阅读全文
posted @ 2012-01-19 11:57 AC_Von 阅读(308) 评论(0) 推荐(0) 编辑
摘要: 下边是从天涯空间里找出来的练习(转自notonlysuccess)http://acm.pku.edu.cn/JudgeOnline/problem?id=3345http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3201 √http://acm.pku.edu.cn/JudgeOnline/problem?id=3107 √http://acm.pku.edu.cn/JudgeOnline/problem?id=1655 √http://acm.pku.edu.cn/JudgeOnline/problem?id=2378 阅读全文
posted @ 2012-01-10 11:07 AC_Von 阅读(308) 评论(0) 推荐(0) 编辑
摘要: 无意间看到hh大牛的这篇博客:http://www.cppblog.com/notonlysuccess/archive/2011/09/26/80162.html#156835“去年10月16号,A了第一道A+B,我的AC生涯也正是开始了今天是4月16号,正好半年,提交了三道水题。。。在HDU的AC量达到了900。。。” 这得如何疯狂的刷题才能做到这样。回头想想自己,为了能1Y一道水题而沾沾自喜!做完一道题就不自觉的想着休息一会,我又有什么资本休息?比别人多的题多还是比别人掌握的好。就这样的效率下去我还ac个球啊!不如回家种红薯去得了! 什么QQ空间,什么微博,全是浪费时间,扯淡!之... 阅读全文
posted @ 2012-01-08 16:50 AC_Von 阅读(358) 评论(0) 推荐(0) 编辑
摘要: /*题意:传说中的Ural神校要搞80周年校庆。学校的员工关系构成一颗树,每个员工有个pleasure值,表示参加party的开心程度。每个员工都不想跟自己的顶头上司一起参加party。然后校长就想啦,怎么发请柬才能让party最high。 思路:定义fw[i]表示带上根结点时这颗子树的最大pleasure,fn[i]表示不带根结点时这颗子树的最大pleasure。转移方程就是:fw[i] = sum(fn[son[i]]);fn[i] = sum( max(fn[son[i]], fw[son[i]]) );其实很容易实现,画个图一目了然。*///ps:1Y,^_^//My Code:... 阅读全文
posted @ 2012-01-08 16:20 AC_Von 阅读(241) 评论(0) 推荐(0) 编辑
摘要: 纠结的问题。做了两天,还是在拜读大牛代码的情况下ac的。好好谢谢总结吧。 诸位大牛的思路是两次dfs。前提:建树的时候按无向边从上往下建。第一次dfs是搜出一个根结点到其他结点的最长路径和次长路径(次长路径不是最长路径的子路径,也就是说不在同一条路上。) 一个结点到其他结点的最长路径怎么得到?1、可能是从这个结点往下取到最长路径。2、可能是从这个结点的父结点上选去另一条路径。 当情况一时:第一次dfs所得的最长路径就是要求的结果。当情况二时:第一次dfs所得的次长路径就是所求结果。 另外,因为是无向边建树,所以第一次dfs从下往上搜,第二次dfs从上往下搜。 具体实现:定义dp[... 阅读全文
posted @ 2012-01-07 17:13 AC_Von 阅读(379) 评论(0) 推荐(0) 编辑
摘要: 最近发现以前写的解题报告很乱,往后准备整理这去写。也就是说在做专题的时候相同专题的多个题目一块写,顺便写一下专题的总结。这样的话即使是每天都做题也可能不是每天都发解题报告。个人感觉这东西在精不在多,好的,就这样了。这几天实验室里在做题的。。。咳咳。可能大家都在忙着做课程设计吧。 不管怎么说,想做好一件事的首先要做的就是坚持!各位队友,还有我自己,加油了!!! 阅读全文
posted @ 2012-01-06 19:55 AC_Von 阅读(177) 评论(0) 推荐(0) 编辑
摘要: 这两道题很类似,先说第一道题。定义dp[i][j]表示根结点为i时,用掉j个士兵得到的最大possible。dp[i][j] = max(dp[i][j], dp[i][j-k] + dp[son[i]][k]);递归的求出dp[son[i]][k]的值。最后结果就是dp[1][m];用临界矩阵存图。核心代码:void dfs(int root) { int i, j, k, child, len; vis[root] = true; for(i = tree[root].bugs; i <= m; i++) { dp[root][i] = tree[roo... 阅读全文
posted @ 2012-01-06 11:50 AC_Von 阅读(237) 评论(0) 推荐(0) 编辑
摘要: 可耻的看了解题报告。题意:给定一个火车车箱的序列 n(及每个车箱所能容纳的乘客),3 个火车头,及每个火车头所能拉动的车箱序列 m.求 3 个火车头所能拉的最多的乘客数.注意:火车头只能按顺序拉,不能跳着拉(如可拉 1,2 或 2,3 或 3,4,但不能拉 1,3/2,4).思路:k表示火车头(1, 3). i表示第i节车厢,j表示往前退j个车厢(1 <= j <= m && 1 <= j <= i)所以有:dp[k][i] = max(dp[k-1][i - j] + sum[i] - sum[i-j], dp[k][i-1]). 阅读全文
posted @ 2012-01-02 21:58 AC_Von 阅读(185) 评论(0) 推荐(0) 编辑
摘要: A:tc的原题,250pt的,SIM几我忘了。估计polla队长是看我们刚考试完,出点简单题给我们找找状态。判断两个字符串是否同时出现'W'.B:貌似数据不大,水过了的。C:有向图+Dijkstra。 阅读全文
posted @ 2012-01-02 20:03 AC_Von 阅读(180) 评论(0) 推荐(0) 编辑
摘要: /*题意很清楚。思路大概是:设dp[i]表示sum(s[x]) = i 时dp[i] = sum(f[x])取到最大。所得的i + dp[i]就是结果。因为s[i]有负的。所以0坐标位置移动一下。dp[i]初始化为 -∞。0坐标位置为dp[MID] = 0;*///主要代码:for(i = 0; i < n; i++) { if(s[i] <= 0 && f[i] <= 0) continue; if(s[i] > 0) { for(j = M; j >= s[i]; j--) { if(dp[j-s[i]] != -inf) ... 阅读全文
posted @ 2012-01-01 21:51 AC_Von 阅读(182) 评论(0) 推荐(0) 编辑
摘要: /*多重背包问题。把a[i]排下序,然后把a[i]作为选第i件物品时的背包容量V。最后结果要[0, max(a[i])]遍历一遍,找到最大值。*///My Code:#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int N = 40007;const int M = 407;class node {public: int h, c, a; friend bool operator < (c 阅读全文
posted @ 2011-12-31 16:28 AC_Von 阅读(183) 评论(0) 推荐(0) 编辑
摘要: 又是几天不做题,一个二进制优化的多重背包让我写的狗屁不通,错漏百出!TLE, WA了好几次,都是细节啊。思路,很裸的多重背包。My Code: 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 5 using namespace std; 6 7 const int N = 100010; 8 const int M = 1024; 9 10 int f[N];11 int k[M], c[M];12 13 int Max(int x, int y) {14 return x & 阅读全文
posted @ 2011-12-23 17:07 AC_Von 阅读(270) 评论(0) 推荐(0) 编辑
摘要: 我沙茶了,看了半天没看懂样例!后来问别人才知道。然后卑鄙,下流,无耻的看了别人的思路。无语了。思路:dp[i][j],表示前i件物品挂上以后偏倚量为j时的情况数。总情况数为15*20*25 = 7500。所以dp[i:1~20][j:-7500 ~ 7500],可以用dp[i][j:0~15000];My Code:View Code 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cmath> 5 6 using namespace std; 阅读全文
posted @ 2011-12-20 22:51 AC_Von 阅读(166) 评论(0) 推荐(0) 编辑
摘要: 题意是夫妻俩洗衣服,只有一个盆。为了防止不同颜色的衣服混色,他俩一个用一个盆同时洗衣服,但只能是相同颜色的衣服。现在知道颜色数M, 衣服数N, 每件衣服的洗完所用的时间和每件衣服的颜色。求最短多长时间把所有的衣服洗完。 思路:把每种颜色的衣服归类,求出第i种颜色衣服所用的总时间sum[i], 以sum[i]/2为背包容量,求出该容量是背包的最大value,sum[i] - f[sum[i]/2]就是洗这种颜色的衣服所用的时间。 ps:wa了两次,不知道为什么,又重新敲了一遍就过了。My Code: 1 #include <iostream> 2 #include <cstdi 阅读全文
posted @ 2011-12-19 19:38 AC_Von 阅读(282) 评论(0) 推荐(0) 编辑
摘要: 临近期末考试,有的课甚至都没学过呢。我想我应该是acmer里的流氓,据说大部分acmer都是学霸,而我这流氓肯定是个特例。今天上午考四级,给我的唯一印象就是那句常说的话:挂挂更健康。估计这次会挂很惨。虽然cet-4,cet-6这种考试也不尽公平(考试前一个小时哥们给我发短信把作文题目告诉我来,傻叉的我还没看到!!!)但总体上还是能体现大部分人的能力的。不想了,明年继续。 关于acm,这段时间,准确说有一个星期吧。一道题也没刷,是在忙着复习吗?也不尽然!人的惰性是一种很恐怖的东西,它可以让你想尽一切借口的逃避,然后躲在宿舍漫无目的的玩。稍微好点的习惯都被惰性慢慢的侵蚀掉了。就像这次的英语作... 阅读全文
posted @ 2011-12-17 21:00 AC_Von 阅读(150) 评论(0) 推荐(0) 编辑
摘要: 简单01背包:View Code 1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 4 5 using namespace std; 6 7 const int N = 12888; 8 const int M = 3407; 9 10 int f[N];11 int w[M];12 int v[M];13 14 int main() {15 //freopen("data.in", "r", stdin);16 17 int n, V, i, 阅读全文
posted @ 2011-12-17 20:44 AC_Von 阅读(198) 评论(0) 推荐(0) 编辑
摘要: 第一眼看上去,很明显的母函数嘛。然后巴拉巴拉代码敲出来,TLE。我晕,再看,数据很大。母函数的三重循环会暴掉的,而且仔细想一下,这题相当于染色问题。用母函数的话有很多重复计算的地方。不许要知道凑成面值m时有多少中凑法,只知道可不可达就可以。 然后看到有人说用《背包九讲》里边提到的单调队列优化的多重背包。然后偶硬生生的啥都没干,用了两天时间看单调队列优化的多重背包。可惜最后结果是没看懂。我觉得原因应该是背包这类dp总的思想理解的不好,以后要好好补补。 今晚实在受不了,论文看不懂,去找强队。强队说单是这题的话不用单调队列优化。加一个数组就可以O(NV)过。思路是加一个数组cnt[], cn... 阅读全文
posted @ 2011-12-09 22:13 AC_Von 阅读(233) 评论(0) 推荐(0) 编辑
摘要: 这是道好题。至少我错了不下10次。dp的两个重点:转移方程+初始化。偶敢保证,偶的转移方程绝对没问题。可是初始化上wa到shi了。昨天想了整整一晚上,跟经典01背包那么像,加上一个容器就写不出来了。然后问鱼神,鱼神说这题的数据人畜无害,哄小盆友的。我了个去!然后问他思路,说设f[i][j][k],表示前i个中挑j个占容量是k时的最大value,然后就没有然后了。。。 我自己就在那列各种状态,各种推导。思路还是很模糊,后来又好几次问鱼神。甚至有几次让我问的直接不鸟我了。T_T悲摧的人生啊。。。 后来推出: f[i][j][k] = max(f[i-1][j][k], f[i-1][j... 阅读全文
posted @ 2011-12-06 17:30 AC_Von 阅读(217) 评论(0) 推荐(0) 编辑
摘要: 昨晚做cf刚被虐完,还被虐感冒了。然后今晚又有一个内部测试赛。头疼+困+不想做 = 这次的比赛。最后过了一道题,用很暴力很暴力的方法过的。估计的焘哥出题时加的数据不强。这次被虐是必然的。。。我现在就有一个念头,那就是睡觉。。。。TT贴一下D题的代码吧,偶唯一的一个题。。。。题目描述Tom喜欢幸运数。我们都知道一个正整数是幸运数当且仅当其十进制表示形式只包含数字4和7.例如,数47,744,4是幸运的,而5,17,467不是。 一天Tom邂逅了一棵有n个结点的树。另外,他发现,这棵树的是带权的,也即树的每条边都有一个权值(一个正整数)。只有当一条边的权值是幸运数时我们才说这条边是幸运的。大... 阅读全文
posted @ 2011-12-04 21:27 AC_Von 阅读(272) 评论(2) 推荐(0) 编辑
摘要: 题意看了老半天,就是说给一个序列[1, n],看是否是(1, 2, 3, ... n),入栈以后出栈时可以得到的序列。My Code:View Code #include <iostream>#include <cstdio>using namespace std;const int N = 100007;int st1[N], st2[N];int main() { //freopen("data.in", "r", stdin); int i, top1, top2, n; while(cin >> n) { fo 阅读全文
posted @ 2011-12-03 19:31 AC_Von 阅读(339) 评论(0) 推荐(0) 编辑
摘要: /*额滴神啊。。。调了整整一晚上。简单染色问题,染完色后再扫描一遍,找出最大的连续是白色的序列。开始必须把0, 109 这两个点加上去。就因为这个都快调shi了。。。扫描的时候用一个数组记录染色后区间的颜色。然后找连续颜色是白色的最大区间。数据有点大,用离散化吧。*///My Code:#include <iostream>#include <cstring>#include <cmath>#include <cstdio>#include <map>#include <queue>#include <stack&g 阅读全文
posted @ 2011-12-01 22:10 AC_Von 阅读(243) 评论(0) 推荐(0) 编辑
摘要: /*开始没看懂题意。悲剧了一晚上。。。题意是N个人编号,1号最高,N号最矮,从后往前跳。我看成1号最矮,N号最高了。其实可以把输入的数转化一下,让1号最矮,N号最高,这样就好处理了。*///My Code:#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int N = 10007;int c[N], n;int lowbit(int i) { return i&(-i);}void add(int i, int val) { while(i 阅读全文
posted @ 2011-12-01 15:21 AC_Von 阅读(305) 评论(0) 推荐(0) 编辑
上一页 1 ··· 5 6 7 8 9 10 11 12 13 ··· 18 下一页