`
人生难得糊涂
  • 浏览: 117356 次
社区版块
存档分类
最新评论

POJ1789-SPFA

 
阅读更多

此题要注意松弛条件

 

#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 图论 集合

    根据提供的文件信息,本文将对其中提及的几个POJ(Peking University Judge Online)平台上的图论题目进行详细的解析,并介绍解决这些问题时所使用的算法和技术。这些题目涵盖了图论中的多个核心概念,如最短路径、...

    SPFA算法.doc

    在实际应用中,例如POJ 1201 "Intervals" 这样的问题,SPFA可以用来解决差分约束系统。差分约束系统是一类线性不等式约束问题,可以通过构造有向图并利用SPFA求解最短路径来找出满足条件的整数序列。在这个问题中,...

    poj pku图论、网络流入门题总结、汇总

    根据提供的标题“poj pku图论、网络流入门题总结、汇总”及描述“很经典的图论,网络流入门的题目,值得一看啊~~其中有简单的解析”,本篇将对这些经典图论与网络流问题进行详细的分析和总结。通过梳理各题目及其...

    lanqiao_杭电ACMOJ解题报告_规划_

    【压缩包子文件的文件名称列表】显示了实际的编程练习题目,比如"UVA-11624失败.cpp"和"POJ-1511-Invitation-Cards.cpp"等,这些文件可能对应着特定的ACM竞赛题目,通过查看和分析这些源代码,可以学习到如何应用...

    最小费用流的原始对偶 (Primal-Dual) 算法.docx

    该算法是融合了直接 SPFA 算法和 KM 重标号算法的优点,实现了最小费用流的计算。该算法的主要过程是反复交替进行最短路和最大流的计算,利用 Reduced Cost 缩小了费用范围,提高了算法的效率。 知识点: 1. 最小...

    图论拾遗(一)题解1

    文章通过三个具体的POJ在线判题平台上的题目来阐述相关算法。 首先,POJ1985是一个基础级别的题目,要求计算无向图中任意两点的最大距离,即图的直径。解决这个问题的方法是选取任意一点作为起点,进行深度优先搜索...

    感觉比较好的一个数据结构知识的总结 .docx

    - 辅助算法,如广度优先搜索(BFS)、最短路径算法SPFA等。 - 实现循环队列时应避免使用取模运算,以免影响性能。 ##### 3. 双端队列 - **定义**:双端队列是一种可以在两端进行插入和删除操作的数据结构。 - **...

    差分约束系统题解1

    【差分约束系统】是一种用于解决一系列线性不等式约束问题的模型,常用于最优化问题,如求解最短路径、...在解决具体问题时,理解Dist数组的含义,正确构建边,以及选择合适的最短路径算法(如SPFA)是解决问题的关键。

    最优匹配题解1

    KM算法的时间复杂度为O(N^3),对于较小规模的问题,它的效率往往优于基于SPFA的费用流算法,后者的时间复杂度在O(N*E^2)到O(N^2*E)之间,对于稠密图来说可能效率较低。 在POJ3686题目中,问题转变为优化订单完成...

    ACM之路的计划

    * 图论:使用优先队列优化 Dijkstra 和 Prim、单源最短路径之 SPFA、差分约束系统、多源多点最短路径之 FloydWarshall 算法、求欧拉路 * 模拟题训练:进行复杂模拟题训练 * 拓扑排序 * 动态规划进阶:完全背包、多重...

    kuangbin acm模板超级好用

    2.6 随机素数测试和大数分解 (POJ 1811) . . . . . . . . . . . . . . . . . . . . . . . 29 2.7 欧拉函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 2.7.1 分解质因素求...

Global site tag (gtag.js) - Google Analytics