#蒟蒻複習之-----spfa,dijkstra#
//好把這個太簡單了
//作為複習篇不講原理
##dijkstra##
//表示很少用,即使他要比spfa穩定
附贈**
模版題
#include#include#include#includeusing namespace std;
const int maxn = 500000 + 100;
const int inf = 2147483647;
int n,m,root;
struct edge e[maxn];
int head[maxn], tot = 0;
struct node
};priority_queueq;
void add(int u, int v, int w) ;
head[u] = tot;
}int vis[maxn],d[maxn];
void dijkstra(int x) );
while(!q.empty()) );
}} }
}int main()
dijkstra(root);
for(int i = 1; i <= n; i++) e[maxn];
int head[maxn], tot = 0;
void add(int u, int v, int w) ;
head[u] = tot;
}int vis[maxn],d[maxn];
void spfa(int x)
}} }
}int main()
spfa(root);
for(int i = 1; i <= n; i++)
}} }
//找父親 輸出u——>v的路徑 如果想正輸可以建個佇列存起來
do e[maxn << 1];
int head[maxn],tot = 0;
int read()
while(ch >= '0' && ch <= '9')
return x * f;
}void add(int u, int v, int w) ;
head[u] = tot;
}int dis[maxn],vis[maxn],col[maxn],flag;
void spfa(int x)
else
} }
vis[x] = 0;
return;
}int main()
for(int i = 1; i <= n; i++)
if( flag )
else
} return 0;
}
##3.差分約束系統##
差分約束是求解n元一次特殊不等式組的一種方法。
差分約束系統包含n個變數和m個約束條件,每個約束條件都是乙個關於兩個變數的一次不等式,每個不等式形如x[i]-x[j]<=a[k],其中1<=i,j<=n,1<=k<=m,x[i]、x[j]為變數,a[k]為常數。
引理:若為差分約束系統的一組解,δ為常數,那麼也是一組解。
差分約束系統中的每個不等式都與最短路中的三角形不等式 dist[v]<=dist[u]+edge(u,v) 形似。dwarf tower(spfa變形)把變數xi看做有向圖中的點i,對不等式x[i]-x[j]<=a[k]從j向i連一條有向邊,邊權為a[k]。建立乙個源點,向每個點連一條有向邊,邊權為0。從源點出發求單源最短路,x[i]=dist[i]就是一組可行解。有負環說明無解。
若對x[i]有範圍限制,可用x[i]與源點之間的約束表示。
不等式》=號時用最長路解決,此時有正環說明無解。
伊吹萃香(建圖)
道路和飛機roads and planes(slf優化)
天路(二分+spfa)
狡猾的商人(差分約束)
蒟蒻複習之 Floyd
暴力無解演算法 入門必備 然而我發現這個簡單的演算法還有很多用法 作為複習篇不講原理 圖的要求 既可以是無向圖也可以是有向圖,邊權可以為負,但是不能存在負環 複雜度為o n 3 原理 dp思路 f i j f i k f k j void floyd 注意 1應對所建的圖進行初始化如下 void i...
蒟蒻複習之 Tarjan
蒟蒻複習之 tarjan 強連通圖的判斷方法 作為複習篇不講原理 noip2015 資訊傳遞 就是找乙個最小環 標準的模板題 雖然有很多解法 include include include includeusing namespace std const int maxn 200000 100 in...
蒟蒻複習之 LCA
蒟蒻複習之 lca 這兩年考lca考的特別多,qaq 重要不重要自己體會 1.tarjan 都說tarjan的好寫,一直沒看過 今天看了看挺簡單的,比倍增的好寫多了 個人比較喜歡打多個函式,有點長 模版題 include include includeusing namespace std cons...