- 博客(17)
- 收藏
- 关注
原创 CF Array
http://codeforces.com/problemset/problem/224/B题意:给你一个含有n个元素数组,让你求出这个数组的一个区间[ l , r ],满足在这个区间中含有 k 个不同的数,且不存在x, y (l 思路: 要使[l , r] 含有k个不同的数,而[l , r] 的任何一个子区间都不满足有k个不同的数,说明[l , r]的端点在这个区间中只出现一
2013-12-29 08:56:46 970
原创 CF Bracket Sequence
http://codeforces.com/problemset/problem/223/A题意:给定一个只含有’[‘ ']' '(' ')' 的字符串,它不一定是合法的,求出它的一个含有 '[' 最多的并合法的字串。思路:相当于括号匹配的问题,多了判断'['的个数而已。以 ([ ] )(( 为例,该字符串每个字符对应下标为0 ,1,2,3,用hash数组记录与当前字符串
2013-12-28 21:59:03 755
转载 有向图强连通分量的Tarjan算法
[有向图强连通分量]在有向图G中,如果两个顶点间至少存在一条路径,称两个顶点强连通(strongly connected)。如果有向图G的每两个顶点都强连通,称G是一个强连通图。非强连通图有向图的极大强连通子图,称为强连通分量(strongly connected components)。下图中,子图{1,2,3,4}为一个强连通分量,因为顶点1,2,3,4两两可达。{5},{6}
2013-12-27 15:45:39 810
原创 poj 2186 Popular Cows(tarjan + 强连通分量 + 缩点)
http://poj.org/problem?id=2186题意:有n头牛,m个膜拜关系,膜拜关系是不可逆的而且是单向传递的,比如A膜拜B,B膜拜C,那么A也膜拜C,但B不一定膜拜A。最后问有多少头牛满足条件:除了它自己,其他所有的牛都膜拜它。思路:问题可以抽象为:给定一个有向图,n个顶点,m条有向边,有多少个顶点满足:其他所有的点都能到达该点。首先假如图G是一个有
2013-12-27 15:38:23 1191
原创 poj 3694 Network(tarjan + LCA)
http://poj.org/problem?id=3694题意:对于一个无向连通图,问加入某条边后,图中有桥的数目。思路:根据tarjan算法求出初始图的桥的数目,并用数组bridge标记桥的终点,在tarjan深搜树中求出每个节点的父节点(数组father表示)以及它们的深度,用于以后迭代求LCA。因为加入某条边后,树中就会存在环,而环中的每条边都不再是桥,这就与求LCA有关了
2013-12-26 16:58:37 1098
原创 poj 1330 Nearest Common Ancestors(LCA模板)
http://poj.org/problem?id=1330题意:给出两个点,求出这两个点最近的公共祖先。求LCA的模板题。大致思路就是访问到某个节点时,先将它自己加入集合中,然后递归访问它的子树,同时把子树加入到集合中来。子树搜索完毕后,判断该节点是否是输入的两个节点之一,若是,并且另外一个也已标记为访问过,那么另外一个节点的祖先便是他们的LCA。#include#includ
2013-12-26 15:38:52 908
原创 poj 1144 Network(割点)
http://poj.org/problem?id=1144题意很简单,已知图中各边的连接情况,求割点的个数。注意输入格式。。#include#include#include#includeusing namespace std;vector edge[110];int dfn[110];//记录节点被访问的深度int vis[110];//记录该节点当前的状态,0表示
2013-12-26 11:04:43 806
原创 Poj 1523 SPF(割点 + tarjan算法)
http://poj.org/problem?id=1523题意:给一个连通网络,其节点数目思路:tarjan算法:从第一个节点开始深度优先搜索,同时记录每个节点i的访问次序以及该节点所能到达的最高辈分(深度最低)的祖先,对这两个数比较确定这个点是否是割点;同时用subnets数组记录,若是割点并且是搜索树的根节点,则它的儿子数就是删除节点 i 后得到的连通分量,若是割点并且是非根节点
2013-12-22 19:53:55 891
转载 图的割点,桥,双连通分支
点连通度与边连通度:在一个无向连通图中,如果有一个顶点集合,删除这个顶点集合,以及这个集合中所有顶点相关联的边以后,原图变成多个连通块,就称这个点集为割点集合。一个图的点连通度的定义为,最小割点集合中的顶点数。类似的,如果有一个边集合,删除这个边集合以后,原图变成多个连通块,就称这个点集为割边集合。一个图的边连通度的定义为,最小割边集合中的边数。双连通图、割点与桥:
2013-12-22 19:31:32 1062
原创 连连看
http://acm.hdu.edu.cn/showproblem.php?pid=1175与普通的BFS不同的是这里的vis数组不是标记是否被访问过,而是记录到这个点的最小转弯次数。#include#include#include#includeusing namespace std;const int INF = 0x3f3f3f3f;int grid[1100][110
2013-12-19 08:49:56 754
原创 各种排序
数据结构学完了,总结一下排序。没有那种排序永远是最优的,各有千秋吧。#include#include#includeusing namespace std;int * insert_sort(int a[], int n)//直接插入排序{ int i,j; for(i = 2; i <= n; i++) { if(a[i-1] > a[i]) { a[0] =
2013-12-18 19:47:07 857
原创 Invitation Cards
http://acm.hdu.edu.cn/showproblem.php?pid=1535题意:有编号为1~p的站点,有Q条公交路线,公交车路线只能从起点走到对应的终点,而且是单向的,每条路线有其对应的车费。早上有p个人从站点1出发,到达与其编号对应的站点(编号为i的人到达编号为i的站点),晚上从各自站点回到1站点,问他们来回的最小费用之和。 思路:很水的题。一个是求源点到其他点
2013-12-10 14:45:02 898
原创 方格取数(2)
http://acm.hdu.edu.cn/showproblem.php?pid=1569与Hdoj1565类似,但 这里是n*m的矩阵,而且n、m#include#include#include#include#includeusing namespace std;const int INF = 0x3f3f3f3f;int map[55][55];int a[260
2013-12-09 21:02:02 858
原创 方格取数(1)
http://acm.hdu.edu.cn/showproblem.php?pid=1565算法:最大点权独立集 = 总点数 - 最小点权覆盖集最小点权覆盖集 = 最小割 = 最大流点独立集:点独立集是无向图G的子集,该子集的导出子图不含边,即任两个在该集合中的点在原图中都不相邻。最大点权独立集:在带权无向图G中,点权之和最大的独立集。点覆盖集:点覆盖集是无
2013-12-09 19:07:46 835
原创 Poj3422 Kaka's Matrix Travels
http://poj.org/problem?id=3422题意:有一个n*n的矩阵,每个方格有一个非负数,每次从左上角走到右下角,而且只能向右走或向下走,将走过的数加起来,再将该方格数置为0,每次走都会得到一个最大的和,走k次,求最大和。思路:最小费用最大流问题,关键仍然是建图。建好图后,每次spfa找到一条s到t的最长路径,然后增光之。这里求得是最大费用,所以要把边上的费用换成相反数,
2013-12-08 21:32:05 780
原创 CF371
http://codeforces.com/problemset/problem/371/A一个序列只含有0和1,令循环节的长度为k,要使每k个循环节对应数字都相等,最少要改变几个数字。水题。#include#includeint main(){ int n,k; int a[110]; while(~scanf("%d %d",&n,&k)) {
2013-12-08 20:08:15 870
原创 CF 370
A:http://codeforces.com/problemset/problem/370/A数学#include#include#include#includeusing namespace std;int main(){ int chess[10][10]; memset(chess,0,sizeof(chess)); for(int i = 1
2013-12-08 13:30:38 955
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人