| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
我的一点想法以spfa为例
1.把energy取相反数 求最短路
2.为保证不在路上挂掉 对dist[t]+w>=0的点不予更新
3.如果出现负环 则把负环节点取一极小值 然后最后一次push这个点
参考程序
bool spfa(int s){
int i,t,u,w;
while(!q.empty())q.pop();
for(i=0;i<N;i++)dist[i]=inf;
memset(used,false,sizeof(used));
memset(cnt,0,sizeof(cnt));
cnt[s]=1;
dist[s]=-100;
q.push(s);
while(!q.empty()){
t=q.front();
if(t==N-1 && dist[t]<0)return true;
q.pop();
used[t]=false;
for(i=p[t];i!=-1;i=e[i].next){
u=e[i].u;
w=e[i].c;
if(dist[t]+w<0 && dist[t]+w<dist[u]){
dist[u]=dist[t]+w;
if(!used[u]){
used[u]=true;
cnt[u]++;
if(cnt[u]>=N){
dist[u]=-inf;
if(cnt[u]==N)q.push(u);
}
else q.push(u);
}
}
}
}
if(dist[N-1]<0)return true;
else return false;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator