POJ-3259(Bellman_Ford )

import java.io.*;

public class Main{

static int Inf = 1000000000 + 10;

static Edge e[] = new Edge[6000];

static int d[] = new int[510] ;

static int n, m, w, s, t, l, top;

public static void main(String[] args) throws Exception {

 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

 StreamTokenizer in = new StreamTokenizer(br);

 int F = nextInt(in);

 while (F-- != 0) {

  top = 0;

  n = nextInt(in);

  m = nextInt(in);

  w = nextInt(in);

  for (int i = 0; i < m; i++) {

   s = nextInt(in);

   t = nextInt(in);

   l = nextInt(in);

   e[top++] = new Edge(s, t, l);

   e[top++] = new Edge(t, s, l);

  }

  for (int i = 0; i < w; i++) {

   s = nextInt(in);

   t = nextInt(in);

   l = nextInt(in);

   e[top++] = new Edge(s, t, -l);

  }

  if (Bellman_Ford()) {

   System.out.println("NO");

  } else {

   System.out.println("YES");

  }

 }

}

private static boolean Bellman_Ford() {

 for (int i = 0; i < d.length; i++) {

  d[i] = Inf;

 }

 d[0] = 0;

 int check;

 for (int i = 0; i < n - 1; i++) {

  check = 0;

  for (int j = 0; j < top; j++) {

   if (d[e[j].t] > d[e[j].s] + e[j].l) {

    d[e[j].t] = d[e[j].s] + e[j].l;

    check=1;

   }

  }

  if (check == 0) {

   break;

  }

 }

 for (int i = 0; i < top; i++) {

  if (d[e[i].t] > d[e[i].s] + e[i].l) {

   return false;

  }

 }

 return true;

}

private static int nextInt(StreamTokenizer in) throws Exception {

       in.nextToken();

 return (int) in.nval;

}

static class Edge {

 int s;

 int t;

 int l;

 public Edge(int _s, int _t, int _l) {

  this.s = _s;

  this.t = _t;

  this.l = _l;

 }

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值