- 博客(10)
- 收藏
- 关注
原创 Codeforces 767B
http://codeforces.com/problemset/problem/767/B一个贪心的问题,考虑每一个来的人,那么最好的到达时间就是比这个人早1min,然后判断这个到底的时间所用的等待时间和之前保存的等待时间哪个少就保存哪个,每次判断后,要改变开始服务的时间(因为第一个到达的人可能晚于最早服务时间)。最后,如果最终的服务时间还在截止时间之前的话,那么就选这个时间,去了不用排队
2017-02-24 14:14:29
476
原创 Floyd求所有端点的最短路径
/*是一个动态规划的思想,具有最优子结构的特点,如果K是最短路径上的一个点,那么他一定会被添加到路径上从k=1开始,依次增加K的个数,直到遍历完所有的K*/#includeusing namespace std;int G[100][100];int n;void floyd(){for(int k=0;kfor(int i=0;ifor(int j
2016-08-25 17:26:05
242
原创 求割点
DFS求割点,用2个数组来记录搜索的信息,DFN记录为访问的时间,L[ ]记录能回到的最小祖节点 最后比较这两个数组的大小,来判断这个点是不是割点 /*10 131 21 43 42 33 103 96 52 52 72 85 85 77 8*/#includeusing namespace std;int DFN[100
2016-08-25 17:20:07
256
转载 Dijkstra+priority_queue
转载自:http://www.cnblogs.com/qijinbiao/archive/2012/10/04/2711780.html重点是算法的松弛操作,在算法内 一个Node节点的含义:x表示自己,d表示dis[x] 即:点和源点到该点的距离while(!q.empty()) { node x=q.top();q.pop(); for(
2016-08-21 21:07:26
345
原创 DFS拓扑排序
根据算法导论的伪代码写的,用的邻接表,思想是:对一个开始DFS,当这个点的所有DFS结束后,把这个点加入到tps[ ]这个数组,就是书上说的那个时间戳#include#includeusing namespace std;struct Edge{int to,val;};vector e[100];//Edge e[100];int vis[100];int
2016-08-21 19:50:49
555
原创 Bellman_Ford算法
主要思想是用邻接表存储所有的边集,对每边进行n-1次松弛操作(通过一条边是否可以让两个点之间的距离减小)后,在进行一次松弛判断,如果还能继续减小,说明存在负环,Bellford——Ford失败为什么要进行N-1次松弛操作:假设起点的边存储在数组的最后一个位置,第一次的循环结束后,只有与原点相邻的那一个点得到了松弛,其他点都松弛失败,第二次被松弛的点可以与其他的N-2个点进行松弛,可松弛的点
2016-08-21 18:22:14
387
原创 算法导论二叉搜索树
两天写完的,没有认认真真的测试,可能有些BUG,自己测试的数据能过,但是我的初始化有些问题,不知道该怎么表示//二叉搜索树#include#includeusing namespace std;struct Node{Node *p,*lchild,*rchild;int key;Node(){p=NULL;lchild=NULL;rchild=NU
2016-08-18 22:50:22
211
原创 Prim和kruskal
Prim算法是对点集的操作 首先做一个struct Node{int key;//保存当前点与下一个点的最短距离int v;//当前点的编号friend bool operator {return a.key>b.key;}//用来处理优先队列}Node vx[ MAXN ];//用来保存所有点的元素priority_queue q;visit [
2016-08-14 22:26:40
162
原创 BFS/DFS的理解和框架
用链接表写的dfs和bfs 只是一个框架我的理解BFS是一个用了队列的搜索用一个while(!q.empty())来当做循环条件在while内部进行判断判断这个点是不是符合条件 然后加入到队列中DFS是一个递归的过程先用一个DFS函数做一个框架遍历每一个点若这个点符合条件,就调用另外一个函数DFS_Search()深入进去在这个DFS_Sea
2016-08-08 11:15:10
1881
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人