| ||||||||||
| 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过的?代码借看下。我的总是WA
#include<iostream>
using namespace std;
#include<cmath>
#include<algorithm>
#include<cstring>
#include<stdio.h>
#include<string>
#include<map>
#include<set>
#include<queue>
double rate[101][101],c[101][101],r1,r2,c1,c2;
double d[101];
double vs;
#define eps 1e-8
bool relax(int u,int v)
{
if (d[v]+eps<(d[u]-c[u][v])*rate[u][v]){
d[v]=(d[u]-c[u][v])*rate[u][v];
return true;
}
else return false;
}
bool spfa(int s,int n)
{
int f=0,r=1,p=1,i,j;
int q[101],t[101];
bool in[101];
memset(in,false,sizeof(in));
memset(t,0,sizeof(t));
q[1]=s;
in[s]=true;
t[s]++;
while (f!=r)
{
f=f%n+1;
int front=q[f];
in[front]=false;
for (i=1;i<=n;i++)
if ((!in[i])&&rate[front][i]>eps)
{
if (relax(front,i)) {
in[i]=true,r=r%n+1,q[r]=i,t[i]++;
if (i==s) return false;
}
if (t[i]>n) return false;
}
}
if (d[s]>vs+eps) return false;
else return true;
}
int main(){
int i,j,n,m,s,a,b;
memset(d,0,sizeof(d));
memset(rate,0,sizeof(rate));
memset(c,0,sizeof(c));
scanf("%d",&n);
scanf("%d",&m);
scanf("%d",&s);
scanf("%lf",&vs);
//cout<<v;
for (i=0;i<m;i++)
{
scanf("%d %d",&a,&b);
scanf("%lf %lf %lf %lf",&r1,&c1,&r2,&c2);
rate[a][b]=r1;rate[b][a]=r2;c[a][b]=c1;c[b][a]=c2;
}
d[s]=vs;
if (spfa(s,n)) cout<<"NO\n";
else cout<<"YES\n";
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator