| ||||||||||
| 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:很奇怪,SPFA在ACM/ICPC和zju上过了,这边打死过不料!In Reply To:很奇怪,SPFA在ACM/ICPC和zju上过了,这边打死过不料! Posted by:orlando22 at 2009-04-20 17:53:12 > 我还在期待SPFA超过16MS的表现呢,结果居然是WA!那位兄弟有同样经历,呼吁帮哈忙!
> PS:基本的Bellman-Ford加二分优化是过了滴!谢谢大家捧场哈!
我也是SPFA不知道怎么就是Wrong Answer,怎么搞的啊,哪位大牛帮我看看
#include <stdio.h>
int map[24][24],a[24];
short ok=0,mapb[24][24];
short SPFA(void);
void add(int,int,int);
main()
{
int i,k,r[24],n,x,j;
for (scanf("%d*",&k);k--;)
{
memset(map,0,sizeof(map));
memset(mapb,0,sizeof(mapb));
memset(a,0,sizeof(a));
for (i=0;i<24;i++)
scanf("%d*",&r[i]);
scanf("%d*",&n);
for (i=0;i<n;i++)
{
scanf("%d*",&x);
a[x]++;
}
if (n==4)
{
printf("No Solution");
continue;
}
for (i=0;i<24;i++)
{
add(i,i-1,-a[i]);
add(i-1,i,0);
if (i>7)
add(i-8,i,r[i]);
}
/*add(0,23,-a[0]);
add(23,0,0);*/
for (j=0;j<=n;j++)
{
for (i=0;i<8;i++)
add(i+16,i,r[i]-j);
if (SPFA())
{
ok=1;
break;
}
}
if (ok) printf("%d\n",j);
else printf("No Solution\n");
}
return 0;
}
short SPFA(void)
{
int l,x,first,end,z[1000]={0},appear[24]={0},in[24]={0},dist[24]={0};
z[0]=0,first=0,end=1,in[0]=1;
for (l=1;l<24;l++)
dist[l]=-2147483647;
while (first!=end)
{
x=z[first],first++,in[x]=0;
for (l=0;l<24;l++)
if (mapb[x][l]&&dist[x]+map[x][l]>dist[l])
{
dist[l]=dist[x]+map[x][l];
if (!in[l])
{
z[end]=l,end++,in[l]=1;
appear[l]++;
if (appear[l]>=30)
return 0;
}
}
}
return 1;
}
void add(s1,s2,s3)
{
if (s1<0||s2<0||s1>23||s2>23) return;
map[s1][s2]=s3;
mapb[s1][s2]=1;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator