本文共 1554 字,大约阅读时间需要 5 分钟。
你有一些古币,现在你要用这些古币去兑换成其他钱币。这个城市里有N个兑换点,每个兑换点包括:
A----钱币A#includehdu上待做: We have carefully selected several similar problems for you:#include #include #include #include #include #include #include #include #include #include #include #define MAXV 110#define MAXE 110<<1#define LL long longusing namespace std;int n,m,start;float num;int vis[MAXV];float money[MAXV];int cnt[MAXV];struct Edge{ int to,next; float rate,cost;};Edge edge[MAXE];int index=1;int first[MAXV]; void add(int u,int v,float rate,float cost){ edge[index].to=v; edge[index].rate=rate; edge[index].cost=cost; edge[index].next=first[u]; first[u]=index++;}bool spfa(){ memset(cnt,0,sizeof(cnt)),memset(money,0,sizeof(money)),memset(vis,0,sizeof(vis)); queue Q; Q.push(start); vis[start]=1; money[start]=num; while(Q.size()) { int t=Q.front(); Q.pop(); vis[t]=0; for(int i=first[t];i;i=edge[i].next) { int to=edge[i].to; float tmp=(money[t]-edge[i].cost)*edge[i].rate*1.0; if(money[to] n) // 某个结点迭代次数超过了n次,存在正权回路 return true; } } } return false;}int main(){ scanf("%d %d %d %f",&n,&m,&start,&num); int a,b; float r1,c1,r2,c2; memset(first,0,sizeof(first)); while(m--) { scanf("%d %d %f %f %f %f",&a,&b,&r1,&c1,&r2,&c2); add(a,b,r1,c1); add(b,a,r2,c2); } if(spfa()) puts("YES"); else puts("NO"); return 0;}
转载地址:http://lhfai.baihongyu.com/