`
Midnight0101
  • 浏览: 15916 次
  • 性别: Icon_minigender_1
  • 来自: 天津
最近访客 更多访客>>
社区版块
存档分类
最新评论

poj1860

poj 
阅读更多
poj1860http://poj.org/problem?id=1860
#include <iostream>
#include <fstream>
#define ADJUST 0.00000001

using namespace std;

struct E
{
	int start;
	int end;
	double r;
	double c;
}e[108*108*2];

double v[108];
int m,n,s;
double origin;

void solved()
{
	int j;
	origin=v[s];
	bool flag;

	while(v[s]-origin<=ADJUST)
	{
		flag=false;
		for(j=1;j<=m*2;j++)
		{
			if(v[e[j].end]-(v[e[j].start]-e[j].c)*e[j].r<-ADJUST)
			{
				v[e[j].end]=(v[e[j].start]-e[j].c)*e[j].r;
				flag=true;				
			}
		}
		if(!flag)
		{
			if(v[s]-origin>ADJUST)
			{
				cout<<"YES"<<endl;
				return;
			}
			else
			{
				cout<<"NO"<<endl;
				return;
			}
		}
		
	}
	cout<<"YES"<<endl;
	
		
}

int main()
{
	//ifstream cin("1.txt");
	int i,j;
	for(i=0;i<108;i++)
		v[i]=0.0;
	
	cin>>n>>m>>s;
	cin>>v[s];
	
	for(i=0,j=1;i<m;i++,j+=2)
	{
		int a,b;
		double rab,rba,cab,cba;
		cin>>a>>b>>rab>>cab>>rba>>cba;
		e[j].start=a;
		e[j].end=b;
		e[j].r=rab;
		e[j].c=cab;		
		e[j+1].start=b;
		e[j+1].end=a;
		e[j+1].r=rba;
		e[j+1].c=cba;		
	}
	solved();
	return 0;
}

注意:
1、所开数组e的大小
2、bellman算法不再能松弛时结束
3、v[e[j].end]-(v[e[j].start]-e[j].c)*e[j].r<-ADJUST,ADJUST用负号
4、数据类型不要搞错
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics