SPFA萌新求助!(悬关)
查看原帖
SPFA萌新求助!(悬关)
601747
xibaohe楼主2023/8/17 21:48

rt,spfa全WA,求调,悬2-3关

#include<iostream>
#include<cstring>
#include<vector>
#include<queue>
using namespace std;

#define int long long

int n, m, s, dis[10005],k[10005], cnt,id[1005][1005],x,y;
vector<int> g[10005], w[10005];
bool vis[10005];
queue<int> q;

void spfa(int s)
{
	memset(dis, 0x3f, sizeof(dis));
	dis[s] = 0;
	q.push(s);
	vis[s] = true;
	while(!q.empty())
	{
		int u = q.front();
		q.pop();
		vis[u] = false;
		for(int i = 0; i < g[u].size(); i++)
		{
			int v = g[u][i];
			if(dis[v] > dis[u] + w[u][i])
			{
				dis[v] = dis[u] + w[u][i];
				if(vis[v] == false)
				{
					q.push(v);
					vis[v] = true;
				}
			}
		}
	}
}

signed main()
{
	cin >> n;
	id[0][1]=cnt; 
	for(int i=1;i<=n;i++)
	{
	    cin>>k[i];
	    for(int j=1;j<=k[i];j++)
	    {
	        id[i][j]=++cnt;
	    }
	    for(int j=1;j<=k[i];j++)
	    {
	        while(true)
			{
				cin>>x;
				if(!x) break;
				cin>>y;
				g[id[i-1][x]].push_back(id[i][j]);
				w[id[i-1][x]].push_back(y);
			}
	    }
	}
	
	spfa(1);
	
	int ans=0x3f3f3f3f;
	
	for(int i = 1; i <= k[n]; i++)
	{
		ans=min(ans,dis[id[n][i]]);
	}
	
	cout<<ans<<endl;
	
	return 0;
}

我知道SPFA死了,所以不要再回复了谢谢

2023/8/17 21:48
加载中...