poj1511(n个点到1的最短路径)Invitation Cards

578 篇文章 ¥299.90 ¥399.90
570 篇文章 ¥299.90 ¥399.90
26 篇文章 ¥299.90 ¥399.90
该博客介绍了POJ1511问题的解决方案,即计算从点1到所有点及所有点到点1的最短路径之和。通过将所有边反向并使用单源最短路径算法(如SPFA)求解1的最短路径,可以得到所需结果。代码中展示了如何构建图的边以及如何应用SPFA算法来找到最短路径和。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*
题目大意:求出点1到所有点的最短路之和 + 所有点到点1的最短路之和
这个解题思路非常巧妙,要求所有点到1的最短路径,则把所有边反向,然后求1的单源点最短路即可 
*/
//ps:poj不按套路出牌啊,dis居然那么大,搞的和超出了int 
#include<cstdio>
#include<cstring>
#include<queue> 
using namespace std;
const int mn=1000005,mm=1000005;
struct Edge{
	int to,w,next;
}edges[2*mm];
int h1[mn],h2[mn],tot,n,m,dis[mn];
bool inq[mn];
void add1(int u,int v,int w)
{
	edges[tot].to=v;
	edges[tot].w=w;
	edges[tot].next=h1[u];
	h1[u]=tot++;
}
void add2(int u,int v,int w)
{
	edges[tot].to=v;
	edges[tot].w=w;
	edges[tot].next=h2[u];
	h2[u]=tot++;
}
long long spfa(int* head)
{
	//求1的单源点最短路
	//memset(dis,6,(n+1)*sizeof(int));
	for(int i=1;i<=n;++i)
	dis[i]=2e9;
	memset(inq,0,(n+1)*sizeof(bool));
	dis[1]=0,inq[1]=true;
	deque<int> q;
	q.push_back(1);
	whi
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值