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 |
dist初值应设为-1或更小In Reply To:SPFA WA了,BellmanFord AC了。求解。 Posted by:fyq at 2011-01-26 18:11:00 > 程序如下,SPFA被注释了。 > #include <cstdio> > #include <cstring> > #define oo 2147483647 > #define maxn 10001 > #define maxm 31111 > > using namespace std; > > struct edge_type > { > int x,y,cost,next; > }; > > int n,m,total; > bool mark[maxn + 1]; > int stack[maxn + 1]; > int dist[maxn + 1]; > > int first[maxn + 1]; > edge_type g[maxm + 1]; > > void add(int x,int y,int cost) > { > g[++total].x = x; g[total].y = y; g[total].cost = cost; > g[total].next = first[x]; > first[x] = total; > } > > void spfa() > { > memset(mark,0,sizeof(mark)); > memset(dist,0,sizeof(dist)); > for (int i=1;i<=n;i++){ //这段是BellmanFord > bool flag = 0; > for (int j=1;j<=total;j++){ > int x = g[j].x,y = g[j].y,c = g[j].cost; > if (dist[x] + c>dist[y]){ > dist[y] = dist[x] + c; > flag = 1; > } > } > if (!flag) break; > } > /* SPFA在这里 > int top = 1; > for (top=1;top<=n + 1;top++){ > stack[top] = top - 1; > } > while (top){ > int x = stack[top --]; > mark[x] = 0; > for (int temp=first[x];temp;temp=g[temp].next){ > int y = g[temp].y; > int tmp; > if ((tmp = dist[x] + g[temp].cost)>dist[y]){ > dist[y] = tmp; > if (!mark[y]){ > mark[y] = 1; > stack[++top] = y; > } > } > } > } */ > /* > for (int i=1;i<=n;i++){ > printf("%d ",dist[i]); > } > printf("\n"); > */ > } > > int main() > { > freopen("1716.in","r",stdin); > freopen("1716.out","w",stdout); > while (scanf("%d",&m)==1){ > total = 0; > memset(first,0,sizeof(first)); > n = 0; > for (int i=1;i<=m;i++){ > int a,b; > scanf("%d%d",&a,&b); > b ++; > if (a>b){ > int tmp = a; a = b; b = tmp; > } > if (b>n) n = b; > add(a,b,2); > } > for (int i=0;i<=n;i++){ > add(i,i + 1,0); > add(i + 1,i,-1); > } > spfa(); > printf("%d\n",dist[n]); > } > } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator