![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
图论
文章平均质量分 56
ThunderSei
这个作者很懒,什么都没留下…
展开
-
求树中最长路径 树的直径
使用两次BFS,第一次BFS在任意位置,所找到的最远端点是直径的一个端点。第二次BFS从第一次BFS得到的最远端开始,两次得到的端点间的这条路径即为最长路径。 证明; 一:第一次BFS得到的最远端是直径的一个端点。 若开始点V是直径上的点,必然到达的最远端是直径上某端点(反证) 若不是则必然与直径相交,若从V至最远端的这条路径与直径不相交,则从最远端到V再抵达直径某端点这条路径必然远于原创 2013-05-16 21:43:17 · 1323 阅读 · 0 评论 -
lightoj 1168 tarjan 强联通分量加缩点 加各种题目坑
#include #include #include #include #include using namespace std; vector G[2000]; vector C[2000]; int dfn[2000]; int low[2000]; int cmp[2000]; stack sta; bool instack[2000]; bool used[2000]; int top原创 2013-11-11 12:49:20 · 731 阅读 · 0 评论 -
lightoj 1003 强联通模板题
#include #include #include #include #include #include #include using namespace std; map mp; vector topo; vector G[12000]; vector rG[12000]; int cmp[20000]; int num_kind=0; int used[20000]; void dfs(原创 2013-11-10 21:34:33 · 718 阅读 · 0 评论 -
lightoj 1034 贪心 拓扑排序
#include #include #include using namespace std; vector G[15000]; int nv,ne; vector topo; bool used[20000]; void dfs(int n) { used[n]=1; for(int i=0;i<G[n].size();i++) { int v=G[n][i]; if(!used原创 2013-11-10 22:10:46 · 840 阅读 · 0 评论 -
hangzhou 02
#include #include #include #include #include #include using namespace std; const int INF=12345678; int n,m; struct P { int x,y; P(int a,int b) { x=a; y=b; } P(){} }; int b[200][200]; queue q原创 2013-11-09 14:21:27 · 663 阅读 · 0 评论 -
lightOJ 1002 最小瓶颈树 ..
第一次要把最小生成树保存下来。还是对算法理解有问题。一开始的时候要把起始点设置为1,并把所有的相连边加入队列中。 自己写edge的时候不喜欢记录来源,所以用了个Pair,实在捉鸡,可以直接写成带有from的struct,这样代码复杂度会减少很多。 #include #include #include #include #include #include using namespace st原创 2013-11-08 17:24:55 · 602 阅读 · 0 评论 -
POJ3009 DFS 但主要问题是抽象代码的方法
一会再编辑 #include #include int b[200][200]; const int MAX=9999; int step=MAX; int h,w; int dir[4][2]={0,1,1,0,0,-1,-1,0}; void dfs(int x,int y,int n) { if(n>=10) return ; n++; int i=x,j=y,k; in原创 2013-10-27 23:13:48 · 533 阅读 · 0 评论 -
POJ3255
求次短路,先求出1到所有点的距离dist,再求出N到所有点的距离dist[1],然后遍历所有边 dist[u]+cost[u][v]+dist1[v]第二的就是次短路。 #include #include #include #include #include #include #include using namespace std; const int INF=0x3f3f3f3f;原创 2013-10-23 18:15:11 · 597 阅读 · 0 评论 -
tarjian算法 最大强连通分支
先记下思路,使用今后再更新 tarjian算法是利用DFS寻找最大连通分支的算法,算法只需要对图进行一次DFS,无论时间复杂度还是代码复杂度都不是太高。 思路就是先利用DFS构造一棵树,那么分成四种边——树边、前向边、后向边、交叉边。前向边在环中等价于树边 (请画图验证) ,因此直接忽略,交叉边在树中不构成环(依然画个图...),只有后向边构成环(还是画个图),因此,重点就是利用后向边,找到原创 2013-05-16 01:02:15 · 1385 阅读 · 0 评论 -
lightoj 1210 最少加边,使得图变成强联通
huilaizai xie #include #include #include #include #include using namespace std; #define MS(x) memset(x,0,sizeof(x)) stack S; vector G[23000]; vector C[23000]; bool used[25000]; int dfn[25000]; in原创 2013-11-11 21:11:30 · 656 阅读 · 0 评论