| ||||||||||
| 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