这道题目其实就是在求有没有正环。与求负环的区别就是要不断的更新值,但是这个值要变大。而不是变小。
| Time Limit: 1000MS | Memory Limit: 30000K | |
| Total Submissions: 20441 | Accepted: 7337 |
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
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <limits.h>
#include <ctype.h>
#include <string.h>
#include <string>
#include <math.h>
#include <algorithm>
#include <iostream>
#include <queue>
#include <stack>
#include <deque>
#include <vector>
#include <set>
#include <map>
using namespace std;
const int INF = 99999999.9;
const int EM = 5555;
const int VM = 110;
int n,m,s;
double mon;
struct Edge{
int u,v;
double com;
double exg;
}edge[EM<<1];
int cnt;
double dis[VM];
//double mon;
/*void addage(int cu,int vu,double aa,double bb){
edge[cnt].from = cu;
edge[cnt].to = vu;
edge[cnt].com = aa;
edge[cnt].exg = bb;
cnt++;
}*/
int Bellman(){
int i,j,flag;
for(i=1;i<=n;i++){
dis[i] = 0.0;
}
dis[s] = mon;
for(i=1;i<n;i++){
bool flag = false;
for(j=0;j<cnt;j++){
int u = edge[j].u;
int v = edge[j].v;
double rate = edge[j].exg;
double cost = edge[j].com;
if(dis[v]<(dis[u]-cost)*rate)//求最大的路径
{
dis[v]=(dis[u]-cost)*rate;
flag=true;
}
//if(dis[edge[j].to] < (dis[edge[j].from]-edge[j].com)*edge[j].exg){
// dis[edge[j].to] = (dis[edge[j].from]-edge[j].com)*edge[j].exg;
// flag = 1;
//}
}
if(flag==false){
return false;
}
}
for(j=0; j<cnt; j++)
{
if(dis[edge[j].v]<(dis[edge[j].u]-edge[j].com)*edge[j].exg)//与传统的bell不一样,传统的bell是找负环。现在是找正环,正环无限松弛
return true;
}
return false;
}
int main(){
//int n,m,s;
//double mon;
double rab,cab,rba,cba;
int marka,markb;
while(~scanf("%d%d%d%lf",&n,&m,&s,&mon)){
cnt = 0;
//flag = 1;
while(m--){
scanf("%d%d%lf%lf%lf%lf",&marka,&markb,&rab,&cab,&rba,&cba);
//addage(marka,markb,a2,a1);
//addage(markb,marka,b2,b1);
edge[cnt].u=marka,edge[cnt].v=markb,edge[cnt].com=cab,edge[cnt].exg=rab;
cnt++;
edge[cnt].u=markb,edge[cnt].v=marka,edge[cnt].com=cba,edge[cnt].exg=rba;
cnt++;
}
if(Bellman()){
printf("YES\n");
}
else{
printf("NO\n");
}
}
return 0;
}
原文地址:http://blog.csdn.net/zcr_7/article/details/39777965