题目大意:
最短路;
基本思路:
松弛;
代码如下:
struct Edge{ int to,w; bool operator<(const Edge& rhs)const{ return w>rhs.w; } }edge[maxn]; vector<int>gra[maxn]; int dis[maxn],cnt[maxn]; bool vis[maxn]; bool bellman_ford(int s){ queue<int>q;q.push(s); memset(vis,false,sizeof(vis));vis[s]=true; memset(cnt,0,sizeof(cnt)); for(int i=0;i<n;i++) dis[i]=inf; dis[s]=0; while(!q.empty()){ int u=q.front();q.pop(); vis[u]=false; int sz=gra[u].size(); for(int i=0;i<sz;i++){ Edge& e=edge[gra[u][i]]; if(dis[e.to]>dis[u]+e.w){ dis[e.to]=dis[u]+e.w; if(!vis[e.to]){ q.push(e.to); vis[e.to]=true; cnt[e.to]++; if(cnt[e.to]>n){ return false; } } } } } return true; }