此题要注意松弛条件
#include<iostream> #include<queue> using namespace std; #define MAXSIZE 1000 typedef struct node{ int u; int v; double w; double c; }node; node p[MAXSIZE]; int head[MAXSIZE]; int next[MAXSIZE]; int n,m,s; double dis[MAXSIZE]; double v;//v 为初始拥有的货币数量 int e; queue<int>que; int vis[MAXSIZE]; int cnum[MAXSIZE]; int spfa(int s) { int i,j; while(!que.empty()) que.pop(); memset(vis,0,sizeof(vis)); memset(cnum,0,sizeof(cnum)); memset(dis,0,sizeof(dis));//初始时每个节点都没有钱 vis[s]=1; cnum[s]++; dis[s]=v; que.push(s); while(!que.empty())//当队列非空 { int te=que.front(); que.pop(); vis[te]=0; for(i=head[te];i!=-1;i=next[i])//取出te相连的所有点 { //if 利益增加了 则松弛(对应于 路径变短) //(现在拥有的货币-手续费)*比率 等于可以换得的货币 double tt=(dis[te]-p[i].c)*p[i].w;//dis[te] 表示te这个点拥有的资产 if(dis[p[i].v]<tt) { dis[p[i].v]=tt; if(!vis[p[i].v]) { vis[p[i].v]=1; cnum[p[i].v]++; que.push(p[i].v); if(cnum[p[i].v]>n) { return 1; } } } } } return 0; } void addnode(int u,int v,double w,double c) { p[e].u=u; p[e].v=v; p[e].w=w; p[e].c=c; next[e]=head[u]; head[u]=e++; } int main() { //freopen("in.txt","r",stdin); //while(scanf("%d%d%d%lf",&n,&m,&s,&v)!=EOF) { scanf("%d%d%d%lf",&n,&m,&s,&v); e=0; memset(head,-1,sizeof(head)); memset(next,-1,sizeof(next)); while(m--) { int a,b; double r1,c1,r2,c2; scanf("%d%d%lf%lf%lf%lf",&a,&b,&r1,&c1,&r2,&c2); addnode(a,b,r1,c1); addnode(b,a,r2,c2); } //spfa if(spfa(s)) printf("YES\n"); else printf("NO\n"); } }
相关推荐
根据提供的文件信息,本文将对其中提及的几个POJ(Peking University Judge Online)平台上的图论题目进行详细的解析,并介绍解决这些问题时所使用的算法和技术。这些题目涵盖了图论中的多个核心概念,如最短路径、...
在实际应用中,例如POJ 1201 "Intervals" 这样的问题,SPFA可以用来解决差分约束系统。差分约束系统是一类线性不等式约束问题,可以通过构造有向图并利用SPFA求解最短路径来找出满足条件的整数序列。在这个问题中,...
根据提供的标题“poj pku图论、网络流入门题总结、汇总”及描述“很经典的图论,网络流入门的题目,值得一看啊~~其中有简单的解析”,本篇将对这些经典图论与网络流问题进行详细的分析和总结。通过梳理各题目及其...
【压缩包子文件的文件名称列表】显示了实际的编程练习题目,比如"UVA-11624失败.cpp"和"POJ-1511-Invitation-Cards.cpp"等,这些文件可能对应着特定的ACM竞赛题目,通过查看和分析这些源代码,可以学习到如何应用...
该算法是融合了直接 SPFA 算法和 KM 重标号算法的优点,实现了最小费用流的计算。该算法的主要过程是反复交替进行最短路和最大流的计算,利用 Reduced Cost 缩小了费用范围,提高了算法的效率。 知识点: 1. 最小...
文章通过三个具体的POJ在线判题平台上的题目来阐述相关算法。 首先,POJ1985是一个基础级别的题目,要求计算无向图中任意两点的最大距离,即图的直径。解决这个问题的方法是选取任意一点作为起点,进行深度优先搜索...
- 辅助算法,如广度优先搜索(BFS)、最短路径算法SPFA等。 - 实现循环队列时应避免使用取模运算,以免影响性能。 ##### 3. 双端队列 - **定义**:双端队列是一种可以在两端进行插入和删除操作的数据结构。 - **...
【差分约束系统】是一种用于解决一系列线性不等式约束问题的模型,常用于最优化问题,如求解最短路径、...在解决具体问题时,理解Dist数组的含义,正确构建边,以及选择合适的最短路径算法(如SPFA)是解决问题的关键。
KM算法的时间复杂度为O(N^3),对于较小规模的问题,它的效率往往优于基于SPFA的费用流算法,后者的时间复杂度在O(N*E^2)到O(N^2*E)之间,对于稠密图来说可能效率较低。 在POJ3686题目中,问题转变为优化订单完成...
* 图论:使用优先队列优化 Dijkstra 和 Prim、单源最短路径之 SPFA、差分约束系统、多源多点最短路径之 FloydWarshall 算法、求欧拉路 * 模拟题训练:进行复杂模拟题训练 * 拓扑排序 * 动态规划进阶:完全背包、多重...
2.6 随机素数测试和大数分解 (POJ 1811) . . . . . . . . . . . . . . . . . . . . . . . 29 2.7 欧拉函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 2.7.1 分解质因素求...