Chinaunix首页 | 论坛 | 博客
  • 博客访问: 182165
  • 博文数量: 48
  • 博客积分: 4060
  • 博客等级: 上校
  • 技术积分: 1080
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-23 23:24
文章分类

全部博文(48)

文章存档

2011年(1)

2010年(8)

2009年(2)

2008年(37)

我的朋友

分类: C/C++

2008-03-21 21:13:01

//原来是 flag=false的没被括号括进去导致超时
/*
d[i]  表示从0到i(不包括i)最小的个数
*/
#include
int n,max,min;
int d[50005];
int eu[50005],ev[50005],ew[50005];
int Bellman_Ford()
{
    int i,k,flag;
    //bool flag;
  for(i=min;i<=max;i++)
  d[i]=-1;
  d[min]=0;
  for(k=0;k<=max-min;k++)
  {
     flag=1;
     for(i=0;i     if(d[eu[i]]!=-1&&d[eu[i]]+ew[i]>d[ev[i]])
     {
     d[ev[i]]=d[eu[i]]+ew[i];               
     flag=0;
     }     
     for(i=min;i     if(d[i]!=-1&&d[i]>d[i+1])
     {
     d[i+1]=d[i];
     flag=0;                    
     }          
     for(i=max;i>min;i--)
     if(d[i]!=-1&&d[i]-1>d[i-1])
     {
     d[i-1]=d[i]-1;
     flag=0;                   
     }     
     if(flag)break;
  } 
  return d[max];
}
int main()
{
    int i,x,y,z;
 while(scanf("%d",&n)!=EOF)
 {
 min=50005;max=0;
 for(i=0;i {
  scanf("%d%d%d",&eu[i],&ev[i],&ew[i]);
  ev[i]++;   //注意这里是根据d[i]的定义来做的处理     
  if(eu[i]  if(ev[i]>max) max=ev[i];
 }                       
 printf("%d\n",Bellman_Ford()); 
 }   
}
 
阅读(795) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~