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 }