社区讨论
SPFA超时求解
P1629邮递员送信参与者 3已保存回复 6
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 6 条
- 当前快照
- 1 份
- 快照标识符
- @m5izfrlc
- 此快照首次捕获于
- 2025/01/05 10:17 去年
- 此快照最后确认于
- 2025/11/04 11:57 4 个月前
代码如下:
CPP#include<bits/stdc++.h>
using namespace std;
int n,m,ans=0;
struct node
{
int to,value;
};
vector<node> maps[1145140];
int dis[1145140];
bool book[1145140];
queue<int> q;
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++)
{
int u;
node v;
scanf("%d%d%d",&u,&v.to,&v.value);
maps[u].push_back(v);
}
for(int i=2;i<=n;i++)
{
while(!q.empty()) q.pop();
memset(dis,63,sizeof dis);
memset(book,false,sizeof book);
dis[1]=0,book[1]=true;
q.push(1);
while(!q.empty())
{
int u=q.front();
book[u]=false;
for(int j=0;j<maps[u].size();j++)
{
node v=maps[u][j];
if(dis[v.to]>dis[u]+v.value)
{
dis[v.to]=dis[u]+v.value;
if(book[v.to]==false)
{
book[v.to]=true;
q.push(v.to);
}
}
}
q.pop();
}
ans+=dis[i];
while(!q.empty()) q.pop();
memset(dis,63,sizeof dis);
memset(book,false,sizeof book);
dis[i]=0,book[i]=true;
q.push(i);
while(!q.empty())
{
int u=q.front();
book[u]=false;
for(int j=0;j<maps[u].size();j++)
{
node v=maps[u][j];
if(dis[v.to]>dis[u]+v.value)
{
dis[v.to]=dis[u]+v.value;
if(book[v.to]==false)
{
book[v.to]=true;
q.push(v.to);
}
}
}
q.pop();
}
ans+=dis[1];
}
printf("%d\n",ans);
return 0;
}
样例能过,超时三个点,谁能解释一下?
回复
共 6 条回复,欢迎继续交流。
正在加载回复...