首页 > 代码库 > POJ 1860
POJ 1860
须要推断是否有正权环存在,Bellman-Ford算法就能够辣~
AC代码:
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; struct Edge { int u,v; double r,c; }edge[210]; int n,m,s,k; double w; double d[105]; int bellmanford() { for(int i=1;i<=n;i++) d[i]=0.0; d[s]=w; int i; for(i=1;i<=n;i++) { bool flag = false; for(int j=1;j<k;j++) { int x=edge[j].u; int y=edge[j].v; if(d[y]<(d[x]-edge[j].c)*edge[j].r) { flag = true ; d[y] = (d[x]-edge[j].c)*edge[j].r; } } if(!flag) return false; } for(int i=1;i<k;i++) { if(d[edge[i].v]<((d[edge[i].u]-edge[i].c)*edge[i].r)) return true; } return false; } int main() { while(scanf("%d%d%d%lf",&n,&m,&s,&w)!=EOF) { int a,b; double rab,cab,rba,cba; k=1; while(m--) { scanf("%d%d%lf%lf%lf%lf",&a,&b,&rab,&cab,&rba,&cba); edge[k].u=a; edge[k].v=b; edge[k].r=rab; edge[k].c=cab; k++; edge[k].u=b; edge[k].v=a; edge[k].r=rba; edge[k].c=cba; k++; } int ans=bellmanford(); if(ans) printf("YES\n"); else printf("NO\n"); } return 0; }
POJ 1860
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。