1 /*
2 SPFA模板
3 */
4 const int inf=0x3f3f3f3f;
5 inline int SPFA(int s){
6 memset(dis,inf,sizeof(dis));
7 queue<int > q;
8 dis[s]=0;
9 q.push(s);
10 vis[s]=1;
11 while(!q.empty()){
12 int u=q.front;
13 q.pop();
14 vis[u]=0;
15 for(int i=head[u];i;i=edge[i].next ){
16 int v=edge[i].to ;
17 if(dis[v]>dis[u]+edge[i].value ){
18 dis[v]=dis[u]+edge[i].value ;
19 if(!vis[v]){
20 vis[v]=1;
21 q.push(v);
22 }
23 cntt[v]++;
24 if(cntt[v]>=n) return 0;
25 }
26 }
27 }
28 return 1;
29 }
/*
dijstra模板 (堆优化)
*/
const int inf=0x3f3f3f3f;
typedef pair<int ,int > p
inline void dijstra(int s){
memset(dis,inf,sizeof(dis))
priority_queue<p,vector<p>,greater<p> > q;
dis[s]=0;
q.push(make_pair(0,s));//pair类型默认先比较第一项
while(!q.empty()){
int u=q.top().second;
int w=q.top().first;
q.pop();
if(dis[u]!=w) continue;
for(int i=head[u];i;i=edge[i].next ){
int v=edge[i].to ;
if(dis[v]>dis[u]+edge[i].value ){
dis[v]=dis[u]+edge[i].value ;
q.push(make_pair(dis[v],v));
}
}
}
}
1 /*
2 floyd模板
3 */
4 inline void floyd(){
5 for(int k=1;k<=n;k++)
6 for(int i=1;i<=n;i++)
7 for(int j=1;j<=n;j++){
8 dis[i][j]=min(dis[i][k]+dis[k][j],dis[i][j]);
9 //或者:
10 if(dis[i][j]>dis[i][k]+dis[k][j])
11 dis[i][j]=dis[i][k]+dis[k][j];
12 }
13 }