自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

嗯。

嗯。

  • 博客(19)
  • 资源 (2)
  • 收藏
  • 关注

原创 UVa 11374 Airport Express / Dijkstra

有2中种类型的路 第二种只能用一条 求出起点到所有点的最短路和终点到所有点的最短路 在枚举每一条路输出3部分打印路径如果用了第二种类型的边 输出边的起点 没用输出Ticket Not Used最短路#include #include #include #include using namespace std;const int maxn = 10510;

2014-02-26 18:29:20 960

原创 TOJ 1883 ZOJ 1298 POJ 1135 Domino Effect / Dijkstra

把第一个推倒 求所有多米诺倒下的最短时间 不是每个点上有一个骨牌 是路上都有 每个点只是关键的骨牌 只有一种最优解 先求出1到各点的最短路 求最短路中的最大值 这是一个关键点的情况 在枚举每一条边 u v w 如果(d[u] + d[v] + w) / 2 > max 就更新一下 因为是要求最短路的最大值  这是2个关键点的情况Dijkstra#include #include

2014-02-26 12:51:34 1154

原创 HDU 3622 Bomb Game / 2-SAT

刚刚学 看到很多网上和书上有直接逐点判断的dfs暴力算法 加上今天事情特别多 看了半天也可以用tarjan判断 这个有空在学题意不用说了吧 就是求一个半径 n个炸弹吧 每个可以选择2个点之中的一个放 一定要选一个 比你多也不能少 以这n个点为圆心的圆不能相交然后主要是每次二分建图假设有(u1,u2) (v1, v2)一对 并且当前二分的半径是mid 如果 u1 和 v1的距离小于m

2014-02-20 21:09:47 1081

原创 UVa 11324 The Largest Clique / 强连通分量

有一张有向图G 求一个节点数最大的节点集 其中任意2点 u和v  要么u 可以到v 要么v可以到u 要么相互可达首先缩点 每一个强连通分量都是可达的 求一条路径 路径上的每个点的权值是该强连通分量的节点数 求权最大的路径 可以用记忆化搜索写 #include #include #include #include using namespace std;const i

2014-02-20 14:47:59 1074

原创 ZOJ 1484 HDU 1394 Minimum Inversion Number / 线段树单点更新

一个长度为n的序列 每次可以把第一个序列移动到最后 有n种 求这n种中逆序数最小的首先可以用线段树求出一个序列的然后考虑如果把第一个拿到最后 因为他是第一个 所以听过他是x 那么对于x的逆序数有x对(0~x-1) 因为数字都是0-n-1的 如果把这个x移到最后 逆序数减少x对 增加了n-(x+1)求出一种然后在循环n-1次求出所有的情况取最小#include #include

2014-02-18 20:20:33 1062

原创 ZOJ 3626 Treasure Hunt I / 树形DP

也可以叫做树形背包 因为在回溯的时候像01背包一样 枚举每个物品 从最大容量开始更新这里的物品代表以i为根的子树#include #include #include #include using namespace std;const int maxn = 110;struct node{ int e; int w;};int dp[ma

2014-02-18 19:10:51 1146

原创 HDU 4612 Warm up / 边双连通分量

求建一条路后 最小的桥的数量缩点 形成一棵树 每条边都是桥 求出这棵树的直径 在树的直径2端建一条边是最优的 这样可以使直径上的桥都去掉有重边 重边不能算一条 要多次算做tarjan时 对于u-v 的一条边 那么在枚举v的边的时候 如果第一次遇到fa 就continue 因为重边要算上去啊 第一次不算是因为是无向图而且要手动扩栈啊 #pragma comment(linke

2014-02-18 17:44:16 1059

原创 POJ 3177 Redundant Paths / 边双连通分量

和上一题一样 给你一张图 求最少加几条边可以使全图双连通 多了重边多加了一个bool的数组 判断重边 重边只算一条#include #include #include #include #include using namespace std;const int maxn = 5010;vector G[maxn];bool ok[maxn][maxn

2014-02-17 21:50:11 969

原创 POJ 3352 Road Construction / 边双连通分量

给你一张图 求最少加几条边可以使全图双连通首先缩点 然后求有几个叶子结点 设有n个 答案是(n+1)/ 2 如果n=1那么需要1条(和根相连)如果n=2 需要2条这两个叶子节点相连 如果n=3 需要2条(其中2条相互连接 在求双连通 。。。。)这题主要是学习求边双连通分量的算法有些蛋疼1.应该是无向图 网上有很多人用了求有向图强连通分量的tarjan算法 特地对比了一下2.有些

2014-02-17 20:46:17 998

原创 POJ 2762 Going from u to v or from v to u? / 强连通分量&&拓扑

给你一张图 判断是否任意2点u,v 满足要么u->v 可达 或者 v->u 可达 相互可达也可以强连通分量缩点 在做拓扑 拓扑唯一 说明都互相可达有空放弃用矩阵表示的拓扑 浪费时间 浪费空间#include #include #include #include #include using namespace std;const int maxn = 1010;

2014-02-17 18:58:12 1040

原创 POJ 2186 Popular Cows / 强连通分量

强连通分量缩点 出度为0并且唯一一个强连通分量的大小是所求的答案 不唯一输出0#include #include #include #include #include using namespace std;const int maxn = 10010;vector G[maxn];int pre[maxn];int low[maxn];int sccno[maxn];

2014-02-17 17:28:18 1101

原创 TOJ 2018 POJ 1523 SPF / 割点

求去掉每一个割点后剩下几个连通分量#include #include #include #include #include using namespace std;const int maxn = 1010;vector a[maxn], bcc[maxn];int pre[maxn];int low[maxn];bool iscut[maxn];

2014-02-16 14:58:32 1113

原创 LA 3983 Robotruck / 单调队列

n个垃圾 机器人从(0,0)开始要按照次序捡垃圾 再回到原点 可以带回多个并且重量之和不能大于C 思路和代码全部参考书上的 求走过最小的距离 两点的距离为abs(x1-x2)+abs(y1-y2)dp(i)为捡完第i个垃圾 并且回到原点的最小距离dis(i)从原点到第i个垃圾的记录dist(i)为从第1个 经过第2个 第三个到第i个垃圾的距离 那么从第j个到第i个垃圾的距离为

2014-02-08 16:57:41 1489

原创 HDU 1193 Non-negative Partial Sums / 单调队列

Non-negative Partial SumsTime Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Problem DescriptionYou are given a sequence of n numbers a0,..., an-1. A cyclic

2014-02-08 13:55:53 1215

原创 UVa 11806 Cheerleaders / 容斥原理

求k个石子放在n*m的矩阵里 并且第一行 最后一行 第一列 最后一列都要有石子考虑反面 求出所有的 减去不满足的情况容斥原理总共4个 集合A(第一行没有石子) B(最后行没有石子)C(第一列没有石子)D(最后一列没有石子)减去1个集合的 加上2个集合的 减去3个集合的 加上4个集合的#include #include const int maxn = 510;const i

2014-02-06 23:58:28 1318

原创 UVa 11021 Tribles / 概率DP

k只麻球 每活一天就会死 死之前有pi的概率生出i只麻球 求m天死光的的概率f[i] = p0 + p1*dp(i-1) + p2*dp(i-1)^2+....+pn-1*dp(i-1)^n-1好像是倒着推的pj*dp(i-1)^j 表示1个麻球生了j个麻球在i-1天后死光 1个麻球在i-1天死的概率为dp(i-1) j个麻球就是j个dp(i-1)相乘#include #incl

2014-02-05 19:21:22 1117

原创 UVa 11762 Race to 1 / 概率DP

公式f(x) = 1+f(x)*(1-g(x)/p(x))+ f(x/y)/p(x)p(x)是不超过x的素数的个数g(x)是p(x)个素数中是x因子的个数然后移项(和我上次做的那一题差不多)#include #include const int maxn = 1000010;int vis[maxn];int prime[maxn];int prime_cnt;dou

2014-02-05 15:10:52 1031

原创 LA 3704 Cellular Automaton / 矩阵快速幂

k次操作 每次把每个格子中的值变为和他相邻不超过d的距离格子的和在%m还是可以构造一个矩阵 那样例来说 5个格子的值为1 2 2 1 2n m d k 为5 3 1 1构造矩阵为1 1 0 0 11 1 1 0 00 1 1 1 00 0 1 1 11 0 0 1 1每次把这个矩阵左乘一次 1 2 2 1 2(竖着放)就相当于操作一次 k次操作可以做快速幂然

2014-02-05 14:24:14 1722 3

原创 UVa 11992 Fast Matrix Operations / 线段树成段更新

练基本功 成段更新求2维区间最大值最小值以及和 把某个区间置为v 把某个区间都加上v难点是set与add的先后顺序的处理 如果先做add在做set那么add是没用的 所以做set时将add置为0 当add不为0 并且 set不为0 那么set肯定在add前面(如果在后面 那么add就置为0了)所以这种情况先做set当add为0 set不为0 肯定要做set当add不为0 set

2014-02-04 23:15:40 1279

ACM 学习资料

ACM 学习资料 包括一些压缩包 和 数据结构的一点东西

2013-11-29

数据结构课件

数据结构的课件 感觉比书上的代码容易理解

2013-09-04

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除