poj 1860 最短路

2015/1/26


算法不難,主要別用矩陣去建邊就好= =用矩陣很煩(沒寫出來)。


#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<vector>
#include<climits>
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>

using namespace std;
typedef long long ll;  

#define mod 10007
#define lson pos<<1,l,mid
#define sc(n) scanf("%d",&n)
#define rson pos<<1|1,mid+1,r
#define pr(n) printf("%d\n",n)
#define met(n,m) memset(n, m, sizeof(n))
#define F(x,y,i) for(int i = x;i > y; i--)
#define f(x,y,i) for(int i = x;i < y; i++)
#define ff(x,y,i) for(int i = x;i <= y; i++)
#define FF(x,y,i) for(int i = x;i >= y; i--) 

const int N=100500;
const int inf = INT_MAX;

int Max(int a,int b)
{
	return a>b?a:b;
}

int Min(int a,int b)
{
	return  a<b?a:b;
}

int n, m, tot;


struct node{
	int from,to;
	double rate; 
	double commission;
}s[1000];

double dis[1000];

void BF(int x,double num)
{
	met(dis,0);
	dis[x]= num;
	
	f(1,n,i)
	{
		int temp = 1;
		f(0,tot,j)
		{
			if(dis[s[j].to] < (dis[s[j].from] - s[j].commission)* s[j].rate)
			{
				dis[s[j].to] = (dis[s[j].from] - s[j].commission)* s[j].rate;
				temp =  0;
			}
		}
		if(temp)break;
	}
	
	f(0,tot,i)
	{
		if(dis[s[i].to] < (dis[s[i].from] - s[i].commission)* s[i].rate)
		{
			printf("YES\n");
			return ;
		}
	}
	printf("NO\n");
	return ;
}


int main()  
{  
    int a, b , x;
    double num, r, c;
    while(~scanf("%d%d%d%lf",&n,&m,&x,&num))
    {
    	tot = 0;
    	f(0,m,i)
    	{
	    	scanf("%d%d%lf%lf",&a,&b,&r,&c);
	    	s[tot].from = a;
	    	s[tot].to = b;
	    	s[tot].rate = r;
	    	s[tot++].commission = c;
	    	scanf("%lf%lf",&r,&c);
	    	s[tot].from = b;
	    	s[tot].to = a;
	    	s[tot].rate = r;
	    	s[tot++].commission = c;
			 
	    }
	    
	    BF(x, num);
		    	
    }
    return 0;  
}  
	


發佈了123 篇原創文章 · 獲贊 2 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章