图论专题突破 POJ2387 POJ1734

博客讲述了利用图论中的SPFA算法解决POJ1734题,该题目涉及时间隧道回溯,需考虑单向边及图的不连通性。另外,博主分享了在Dijkstra算法中遇到的错误,关于数组初始化和负边处理的经验教训。
摘要由CSDN通过智能技术生成

dijiskra重载运算符时我竟然把w>b.w写成w>b.to,调了2h,我哭了。

 

POJ1734Sightseeing trip

题意问能否通过时间隧道回溯到出发以前。

SPFA找负环。时间隧道回去的时间相当于一条负边。

1、注意时间隧道是单向边,我还找了半天。。。

2、图可以是不连通的。不能只spfa(1).

#include <cstdio>
#include <cstring>
#include <queue>
#include <algorithm>
#include <vector>
#define INF 0x3f3f3f3f
using namespace std;
const int N=5010;
struct node
{
	int v,w;	
	node (int v,int w):v(v),w(w){}
};
vector<node>tr[N];
int dis[N],n;
bool spfa(int s)
{
	int cnt[N];
	bool vis[N];
	memset(vis,0,sizeof(vis));
	memset(cnt,0,sizeof(cnt));
	queue<int>q;
	while(!q.empty())
		q.pop();
	dis[s]=0;
	vis[s]=1;
	cnt[s]++;
	q.push(s);
	while(!q.empty())
	{
		int tmp=q.front();
		q.pop();
		vis[tmp]=0;
		for(int i=0;i<tr[tmp].size();i++)
		{
			int v=tr[tmp][i].v;
			if(dis[v]==-1||dis[v]>dis[tmp]+tr[tmp][i].w)
			{
				dis[v]=dis[tmp]+tr[tmp][i].w;
				cnt[v]++;
				if(cnt[v]>=n)
					return true;
				if(!vis[v])
				{
					vis[v]=1;
					q.push(v);
				}
			}
		}
	}
	return false;
}
int main()
{
	int T,m,w,u,v,t;
	scanf("%d",&T);
	while(T--)
	{
		scanf("%d%d%d",&n,&m,&w);
		for(int i=1;i<=n;i++)
			tr[i].clear();
		memset(dis,-1,sizeof(dis));
		for(int i=0;i<m;i++)
		{
			scanf("%d%d%d",&u,&v,&t);
			tr[u].push_back(node(v,t));
			tr[v].push_back(node(u,t));
		}
		for(int i=0;i<w;i++)
		{
			scanf("%d%d%d",&u,&v,&t);
			tr[u].push_back(node(v,-t));
		}
		bool flag=1;
		for(int i=1;i<=n&&flag;i++)
			if(dis[i]==-1)//图不连通
				if(spfa(i)) 
				{
					printf("YES\n");
					flag=0;
				}
		if(flag)
			printf("NO\n");
	}
}

POJ2387Til the Cows Come Home

最短路裸题,dijiskra秒了。

在这之前看自己板子竟然觉得自己没有对dis初始化,后来发现是因为memset赋2147483647会变成-1,所以用循环的形式赋的值,一下子没看到。。。

 

#include <cstdio>
#include <queue>
#include <vector>
#include <cstring>
#include <iostream>
#include <algorithm>
#define INF 2147483647 
using namespace std;
const int N=100010;
struct edge
{
	int to,w;
	edge (int _to,int _w):to(_to),w(_w){}
	bool operator < (const edge &b) const 
	{
		return w>b.w;
	}
};
vector<edge>tr[N];
bool vis[N];
int dis[N];
void di(int n,int s)
{
	memset(vis,0,sizeof(vis));
	for(int i=0;i<=n;i++)//memset 10½øÖÆ´óÊý»á³ö´í 
		dis[i]=INF;
	priority_queue<edge>q;
	while(!q.empty()) 
		q.pop();
	dis[s]=0;
	q.push(edge(s,0));
	while(!q.empty())	
	{
		edge tmp=q.top();
		q.pop();
		int u=tmp.to;
		if(vis[u]) continue;
		vis[u]=1;
		for(int i=0;i<tr[u].size();i++)
		{
			int v=tr[u][i].to,w=tr[u][i].w;
			if(!vis[v]&&dis[v]>dis[u]+w)
			{
				dis[v]=dis[u]+w;
				q.push(edge(v,dis[v]));
			}
		}
	}
}
int main()
{
	int t,n,u,v,w;
	while(~scanf("%d%d",&t,&n))
	{
		for(int i=1;i<=n;i++)
			tr[i].clear();
		for(int i=0;i<t;i++)
		{
			scanf("%d%d%d",&u,&v,&w);
			tr[u].push_back(edge(v,w));
			tr[v].push_back(edge(u,w));
		}
		di(n,1);
		printf("%d\n",dis[n]);
	}
} 

 

weixin073智慧旅游平台开发微信小程序+ssm后端毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
python017基于Python贫困生资助管理系统带vue前后端分离毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值