题目链接: http://poj.org/problem?id=1860
找正环,找最长路,水题,WA了两天了。。
#include <stdio.h>
#include <string.h> struct Edge
{
int u, v;
double r, c;
}edge[]; int rear, n, m, s;
double v, dist[]; bool bellman_ford()
{
memset(dist, , sizeof(dist));
dist[s] = v;
for(int i = ; i < n; i++)
for(int j = ; j < rear; j++)
if(dist[edge[j].v] < (dist[edge[j].u]-edge[j].c) * edge[j].r)
dist[edge[j].v] = (dist[edge[j].u]-edge[j].c) * edge[j].r; for(int j = ; j < rear; j++)
if(dist[edge[j].v] < (dist[edge[j].u]-edge[j].c) * edge[j].r)
return ;
return ;
} int main()
{
int a, b;
double rab, cab, rba, cba;
while(scanf("%d %d %d %lf", &n, &m, &s, &v) != EOF)
{
rear = ;
while(m--)
{
scanf("%d %d %lf %lf %lf %lf", &a, &b, &rab, &cab, &rba, &cba);
edge[rear++] = (struct Edge){a, b, rab, cab};
edge[rear++] = (struct Edge){b, a, rba, cba};
}
printf("%s\n", bellman_ford() ? "YES" : "NO");
}
return ;
}