您的位置:首页 > 其它

[kuangbin带你飞]专题四 最短路练习 E POJ 1860

2016-10-10 10:22 423 查看
题目地址:https://vjudge.net/contest/66569#problem/E

思路:考虑到当出现环时说明显然可以使资金增长,所以用了spfa。

AC代码:

#include<iostream>
#include<cstdio>
#include<queue>
#include<vector>
#include<cstring>
using namespace std;
const int maxn=100+5;

struct pos{
double r,c;
};
vector<pair<int,pos> >E[maxn];
double d[maxn];
bool vis[maxn];
int time[maxn];
int n,m,s;
double num;

bool spfa()
{
for(int i=0;i<maxn;i++)
{
vis[i]=false;
time[i]=0;
d[i]=0;
}
queue<int>q;
q.push(s);
d[s]=num;
vis[s]=true;
while(!q.empty())
{
int now=q.front();
q.pop();
time[now]++;
vis[now]=false;
if(time[now]>n)
return true;
for(int i=0;i<E[now].size();i++)
{
int v=E[now][i].first;
double temp=0;
temp=(d[now]-E[now][i].second.c)*E[now][i].second.r;
if(d[v]<temp)
{
d[v]=temp;
if(!vis[v])
{
q.push(v);
vis[v]=true;
}
}
}
}
if(d[s]>num)
return true;
else
return false;
}

int main()
{
cin>>n>>m>>s>>num;
for(int i=0;i<m;i++)
{
int a,b;
double c,d,e,f;
cin>>a>>b>>c>>d>>e>>f;
pos temp;
temp.r=c,temp.c=d;
E[a].push_back(make_pair(b,temp));
temp.r=e,temp.c=f;
E[b].push_back(make_pair(a,temp));
}
printf("%s",spfa()?"YES":"NO");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: