标签:
Description
Input
Output
Sample Input
3 2 1 20.0 1 2 1.00 1.00 1.00 1.00 2 3 1.10 1.00 1.10 1.00
Sample Output
YES
Source
#include<stdio.h> struct edge { int u , v ; double r , c ; }e[300]; int n , m , s ; double cap ; int cnt = 0 ; double d[300] ; bool Bellman_ford() { for (int i = 1 ; i <= n ; i++) d[i] = 0 ; d[s] = cap ; bool flag ; for (int i = 1 ; i <= n ; i++) {//单纯循环 flag = 1 ; for (int j = 0 ; j < cnt ; j++) { if (d[e[j].v] < ( d[e[j].u] - e[j].c ) * e[j].r ) { flag = 0 ; d[e[j].v] = ( d[e[j].u] - e[j].c ) * e[j].r ; } } if (flag) return false ; } return true ; } int main () { scanf ("%d%d%d%lf" , &n , &m , &s , &cap) ; while (m--) { scanf ("%d%d%lf%lf" , &e[cnt].u , &e[cnt].v , &e[cnt].r , &e[cnt].c) ; cnt++; e[cnt].u = e[cnt - 1].v , e[cnt].v = e[cnt - 1].u ; scanf ("%lf%lf" , &e[cnt].r , &e[cnt].c) ; cnt++; } if (Bellman_ford()) puts ("YES") ; else puts ("NO") ; return 0 ; }
里面if的判定是为了去除负向回路,bellman_ford主要是个函数,将数据在这个函数里运行,如果成立返回true.
标签:
原文地址:http://www.cnblogs.com/zero-begin/p/4316615.html