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死了,所以不要再回复了谢谢