Graph
存图
前向星
1 | struct Edge{ |
最短路
floyd-warshall
1 | //Floyd-Warshall算法核心语句 |
bellman
1 | bool bellman_ford(int start, int n){ |
SPFA
1 | const int inf=0x3f3f3f3f; |
堆优dijkstra
1 | struct Edge{ |
dijkstra
1 | for(int i=1; i<=n; i++) |
差分约束系统
求解差分约束系统,都可以转化成图论的单源最短路径(或最长路径)问题。
我们观察上面例子中的不等式,都是x[i] - x[j] <= a[k],可以进行移项,成为x[i] <= x[j] + a[k],我们令a[k] = w(j, i),dis[i]=x[i],并使i=v,j=u,那么原始就变为:dis[u]+w(u,v)>=dis[v],于是可以联想到最短路模型中的一部分代码
但是好像不等号方向刚好相反,但其实这并不矛盾,上面的代码要实现的是使dis[u]+w(u,v)>dis[v],而对于不等式,我们进行建边的操作:对于每个不等式 x[i] - x[j] <= a[k],对结点 j 和 i 建立一条 j -> i的有向边,边权为a[k],求x[n-1] - x[0] 的最大值就是求 0 到n-1的最短路,两者刚好吻合。所以求解差分约束问题就转化为了最短路问题。差分约束
求解不等式组,当把不等式整理成 $d[a]+w<=d[b]$ 时,我们求最长路。整理成 $d[a]+w>=d[b]$ 时,我们求最短路。在一个未知数定死的情况下,最短路求得是最大值,最长路求得是最小值。
candies
1 |
|
最小生成树
最大独立集与最大团
最大团
1 | int n,m,ans; |
最大独立集
补图的最大团