[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");
}
思路:考虑到当出现环时说明显然可以使资金增长,所以用了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");
}
相关文章推荐
- [kuangbin带你飞]专题四 最短路练习 R
- [kuangbin带你飞]专题四 最短路练习 G POJ 1502
- [kuangbin带你飞]专题四 最短路练习 I POJ 2240
- [kuangbin带你飞]专题四 最短路练习
- [kuangbin带你飞]专题四 最短路练习H,I,J
- [kuangbin带你飞]专题四 最短路练习 A POJ 2387
- [kuangbin带你飞]专题四 最短路练习 L POJ 2502
- [kuangbin带你飞]专题四 最短路练习 A
- [kuangbin带你飞]专题四 最短路练习-G
- [kuangbin带你飞]专题四 最短路练习 B POJ 2253
- [kuangbin带你飞]专题四 最短路练习 H POJ 3660
- [kuangbin带你飞]专题四 最短路练习 G MPI Maelstrom
- [kuangbin带你飞]专题四 最短路练习 B
- [kuangbin带你飞]专题四 最短路练习 K(差分约束)L
- [kuangbin带你飞]专题四 最短路练习 C POJ 1797
- [kuangbin带你飞]专题四 最短路练习 J POJ 1511
- [kuangbin带你飞]专题四 最短路练习 P HDU 4725
- [kuangbin带你飞]专题四 最短路练习 R HDU 437
- 【算法系列学习】Dijkstra求最短路 [kuangbin带你飞]专题四 最短路练习 D - Silver Cow Party
- [kuangbin带你飞]专题四 最短路练习