Wormholes
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;
public class source {
public static void main(String[] args) throws Exception {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(bf.readLine());
int T = Integer.parseInt(st.nextToken());
for(int testCase = 1;testCase<=T;testCase++){
st = new StringTokenizer(bf.readLine());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
int W = Integer.parseInt(st.nextToken());
List<Edge> conn = new ArrayList<Edge>();
for(int i = 1;i<=M;i++){
st = new StringTokenizer(bf.readLine());
int start = Integer.parseInt(st.nextToken());
int end = Integer.parseInt(st.nextToken());
int time = Integer.parseInt(st.nextToken());
Edge edge1 = new Edge(start,end,time);
Edge edge2 = new Edge(end,start,time);
conn.add(edge1);
conn.add(edge2);
}
for(int i = 1;i<=W;i++){
st = new StringTokenizer(bf.readLine());
int start = Integer.parseInt(st.nextToken());
int end = Integer.parseInt(st.nextToken());
int time = Integer.parseInt(st.nextToken());
Edge edge = new Edge(start,end,-time);
conn.add(edge);
}
long[] time = new long[N+1];
Arrays.fill(time,100000000);
time[1] = 0;
long transTime;
for(int i = 0;i<N;i++){
for(Edge edge:conn){
transTime = time[edge.start]+edge.time;
if(time[edge.end]>transTime){
time[edge.end] = transTime;
}
}
}
boolean canBack = false;
for(Edge edge:conn){
transTime = time[edge.start]+edge.time;
if(time[edge.end]>transTime){
canBack = true;
break;
}
}
if(canBack){
System.out.println("YES");
}
else{
System.out.println("NO");
}
}
}
static class Edge{
int start;
int end;
int time;
Edge(int start,int end,int time){
this.start = start;
this.end = end;
this.time = time;
}
}
}
1860:Currency Exchange
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
int S = Integer.parseInt(st.nextToken());
double V = Double.parseDouble(st.nextToken());
int start;
int end;
double rSE;
double cSE;
double rES;
double cES;
Object[][] road = new Object[2*M][4];
for(int i = 0;i<2*M;i+=2){
st = new StringTokenizer(br.readLine());
start = Integer.parseInt(st.nextToken());
end = Integer.parseInt(st.nextToken());
rSE = Double.parseDouble(st.nextToken());
cSE = Double.parseDouble(st.nextToken());
rES = Double.parseDouble(st.nextToken());
cES = Double.parseDouble(st.nextToken());
road[i] = new Object[]{start,end,rSE,cSE};
road[i+1] = new Object[]{end,start,rES,cES};
}
double[] visited = new double[N+1];
visited[S] = V;
Object[] current;
double exchangeValue;
for(int i = 0;i<N;i++){
for(int j = 0;j<2*M;j++){
current = road[j];
exchangeValue = (visited[(int)current[0]]-(double)current[3])*(double)current[2];
if(visited[(int)current[1]]<exchangeValue){
visited[(int)current[1]] = exchangeValue;
}
}
}
boolean flag = false;
for(int j = 0;j<2*M;j++){
current = road[j];
exchangeValue = (visited[(int)current[0]]-(double)current[3])*(double)current[2];
if(visited[(int)current[1]]<exchangeValue){
flag = true;
visited[(int)current[1]] = exchangeValue;
}
}
if(flag){
System.out.println("YES");
}
else{
System.out.println("NO");
}
}
}