4点超时求调
查看原帖
4点超时求调
1094797
Myl100313楼主2025/1/17 10:56

代码如下:

#include<bits/stdc++.h>
using namespace std;
int n,m,b;
struct node
{
	int to,value;
};
vector<node> maps[114514];
queue<int> q1;
int dis[114514];
bool book[114514];
int main()
{
    scanf("%d%d%d",&n,&m,&b);
    for(int i=1;i<=m;i++)
    {
    	int r;
    	node s;
    	scanf("%d%d%d",&r,&s.to,&s.value);
    	maps[r].push_back(s);
    	maps[s.to].push_back({r,s.value});
	}
	for(int i=1;i<=b;i++)
	{
		int ans=0;
		int p,q;
		scanf("%d%d",&p,&q);
		memset(dis,63,sizeof dis);
		memset(book,false,sizeof book);
		dis[p]=0,book[p]=true;
		q1.push(p);
		while(!q1.empty())
		{
			int u=q1.front();
			book[u]=false;
			for(int j=0;j<maps[u].size();j++)
			{
				int v=maps[u][j].to,v2=maps[u][j].value;
				if(dis[v]>dis[u]+v2)
				{
					dis[v]=dis[u]+v2;
					if(book[v]==false)
					{
						book[v]=true;
						q1.push(v);
					}
				} 
			}
			q1.pop();
		}
		ans+=dis[1];
		while(!q1.empty()) q1.pop();
		memset(book,false,sizeof book);
		memset(dis,63,sizeof dis);
		dis[1]=0,book[1]=true;
		q1.push(1);
		while(!q1.empty())
		{
			int u=q1.front();
			book[u]=false;
			for(int j=0;j<maps[u].size();j++)
			{
				int v=maps[u][j].to,v2=maps[u][j].value;
				if(dis[v]>dis[u]+v2)
				{
					dis[v]=dis[u]+v2;
					if(book[v]==false)
					{
						book[v]=true;
						q1.push(v);
					}
				} 
			}
			q1.pop();
		}
		ans+=dis[q];
		printf("%d\n",ans);
	}
	return 0;
}

两遍SPFA,4点超时求调。

2025/1/17 10:56
加载中...