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 |
个人建议:你把BELLMAN_FORD换成SPFA,顺便把小函数换成相应函数体的代码。。。In Reply To:差分约束也超时啊。。。请大家指导。。。谢谢 Posted by:bigheadghost at 2006-11-15 19:54:07 > #include<cstdio> > #define INF 200000000 > struct EDGE > { > int st,ed,val; > }edge[1000000]; > int dist[50002]; > int n,result,max,min,nv; > bool inG[50002]; > int getmin(int a,int b) > { > if(a<b) > return a; > else > return b; > } > int getmax(int a,int b) > { > if(a>b) > return a; > else > return b; > } > void BellmanFord() > { > int v,e,s=min; > for(v=min;v<max;v++) > { > dist[v]=-INF; > edge[n].st=v; > edge[n].ed=v+1; > edge[n].val=0; > n++; > edge[n].st=v+1; > edge[n].ed=v; > edge[n].val=-1; > n++; > } > dist[s]=0; > bool over=false; > for(v=0;v<max-min&&!over;v++) > { > over=true; > for(e=0;e<n;e++) > if(dist[edge[e].st]!=-INF&&dist[edge[e].ed]<dist[edge[e].st]+edge[e].val) > { > dist[edge[e].ed]=dist[edge[e].st]+edge[e].val; > over=false; > } > } > result=dist[max]; > } > int main() > { > int i; > scanf("%d",&n); > for(i=0;i<n;i++) > { > scanf("%d%d%d",&edge[i].st,&edge[i].ed,&edge[i].val); > edge[i].ed++; > max=getmax(max,edge[i].ed); > min=getmin(min,edge[i].st); > } > BellmanFord(); > printf("%d\n",result); > return 0; > } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator