
图论
FightingForFinal
这个作者很懒,什么都没留下…
展开
-
完全二叉树结点数,叶子结点数
设结点数为n,叶子结点数为m,则 m = cell ( n / 2 ) n = m * 2 - 1原创 2015-12-02 09:50:24 · 5494 阅读 · 0 评论 -
二分图判定
如果图中的点可以划分成两个集合使得集合内部的点之间没有边相连。 判定方法就是二色染色法,将一个点染成一种颜色,与之相邻的点染成另一种颜色,如果发现相邻两点颜色相同,则不是二分图。#include<bits/stdc++.h>using namespace std;const int maxn=1000;vector<int>nxt[maxn+5];int vis[maxn+5];bool d原创 2016-07-29 19:49:23 · 385 阅读 · 0 评论 -
poj1797Heavy Transportation(dijkstra)
这题和昨天做的poj2253 Frogger(用单源最短路dijkstra的思路求解) 几乎一模一样,只是点的数量范围从200变成了1000,不优化O(n^3)肯定超时,所以要用优先队列优化到O(n^2logn)。 需要注意的一点就是两点不可达则令w=0。 如果起点和终点重合,那么输出一个不小于1000000的数即可。#include<cstdio>#include<cstring>#inc原创 2016-08-01 12:33:37 · 431 阅读 · 0 评论 -
poj2253 Frogger(用单源最短路dijkstra的思路求解)
???????????????n????????????????????????????????????????????n???????????????????????dijkstra???????????d[i]??????i????????w[i][j]???i?j?????? ??? 1. ??i???????????j??d[i]??????d[i]=min(max(d[j],w[i]原创 2016-07-31 20:43:25 · 545 阅读 · 0 评论 -
单源最短路,迪杰斯特拉算法
一个包含n个结点的图,求其他点到源点s的最短距离。 设d[i]表示结点i到s的最短路径的长度,显然有d[s]=0; 设vis[i]表示i是否在集合S中,集合S中存放的是已经求得的最短路径的结点。 算法步骤: 首先在V-S集合中找到最小的d的下标k,然后将k加入到集合S中(令vis[k]=true),然后更新d值即可(令d[i]=min(d[i],d[k]+w[k][i]),其中w[k][i]原创 2016-07-04 12:51:50 · 485 阅读 · 0 评论