| ||||||||||
| 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 | |||||||||
Re:BellmanFord AC,SPFA为什么就WA呢?麻烦用SPFA过的同学给发份代码,或者给我看看,谢谢In Reply To:BellmanFord AC,SPFA为什么就WA呢?麻烦用SPFA过的同学给发份代码,或者给我看看,谢谢 Posted by:YA_ME_DE at 2009-05-06 13:55:33 > #include <iostream>
> #include <queue>
> using namespace std;
> const double eps=1e-6;
> double R[105][105],C[105][105],V;
> int N,M,S;
>
> bool SPFA(){
> double val[105];
> memset(val,0,sizeof(val));
> while (val[S]<V+eps){
> bool b=false;
> int u;
> int count[105];
> memset(count,0,sizeof(count));
> val[S]=V;
> queue <int >Q;
> Q.push(S);
> bool isIn[105];
> isIn[S]=1;
> memset(isIn,0,sizeof(isIn));
> while (!Q.empty()){
> u=Q.front(),Q.pop();
> isIn[u]=0;
> if (count[u]>N)break;
> for (int v=1;v<=N;v++){
> if ( (val[u]-C[u][v])*R[u][v] > val[v]+eps && !isIn[v]){
> val[v]=(val[u]-C[u][v])*R[u][v];
> b=true;
> Q.push(v);
> count[v]++;
> }
> }
> }
> if (!b){
> break;
> }
> }
> if (val[S]>V+eps){
> printf("YES\n");
> }
> else{
> printf("NO\n");
> }
> }
>
> int main(){
> scanf("%d%d%d",&N,&M,&S);
> scanf("%lf",&V);
> double Rab,Rba,Cab,Cba;
> int A,B;
> for (int i=0;i<M;i++){
> scanf("%d%d%lf%lf%lf%lf",&A,&B,&Rab,&Cab,&Rba,&Cba);
> R[A][B]=Rab,R[B][A]=Rba;
> C[A][B]=Cab,C[B][A]=Cba;
> }
> SPFA();
> return 0;
> }
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator