const int maxn=1e4+5; struct Edge{ int from,to,dist; Edge(int u,int v,int d):from(u),to(v),dist(d){} }; struct HeapNode{ int d,u; HeapNode(int sd,int su):d(sd),u(su){} bool operator<(const HeapNode& rhs) const { return d>rhs.d; } }; int n,m; vector<Edge> edges; vector<int> G[maxn]; int d[maxn],cnt[maxn],p[maxn]; bool inq[maxn]; bool bellman_ford(int s){ queue<int>Q; memset(inq,0,sizeof(inq)); memset(cnt,0,sizeof(cnt)); for(int i=0;i<n;i++) d[i]=inf; d[s]=0; inq[s]=true; Q.push(s); while(!Q.empty()){ int u=Q.front();Q.pop(); inq[u]=false; for(int i=0;i<G[u].size();i++){ Edge &e=edges[G[u][i]]; if(d[u]<inf&&d[e.to]>d[u]+e.dist){ d[e.to]=d[u]+e.dist; p[e.to]=G[u][i]; if(!inq[e.to]) { Q.push(e.to);inq[e.to]=true; if(++cnt[e.to]>n) return false; } } } } }
Bellmaxn-ford算法
猜你喜欢
转载自www.cnblogs.com/033000-/p/10040454.html
今日推荐
周排行