题目链接码题集OJ-公园 (matiji.net)
```cpp
#include<bits/stdc++.h>
using namespace std;
const int N=41000;
int e[N],h[N],idx=0,ne[N];
typedef long long ll;
int te,fe,s;
int t,f,n,m;
int d1[N],d2[N],d3[N];
bool st1[N],st2[N],st3[N];
typedef pair<int,int> pll;
void add(int a,int b)
{
e[idx]=b,ne[idx]=h[a],h[a]=idx++;
}
void dij(int x,int (&d)[N],bool(&st)[N])
{
memset(st,false,sizeof st);
memset(d,0x3f3f3f3f,sizeof d);
d[x]=0;
priority_queue<pll,vector<pll>,greater<pll>> q;
q.push({d[x],x});
while(q.size())
{
auto t=q.top();
q.pop();
int v=t.second;
if(st[v]) continue;
st[v]=true;
for(int i=h[v];i!=-1;i=ne[i])
{
int j=e[i];
if(d[j]>d[v]+1)
{
d[j]=d[v]+1;
q.push({d[j],j});
}
}
}
}
int main( )
{
memset(h,-1,sizeof h);
cin>>te>>fe>>s;
cin>>t>>f>>n>>m;
while(m--)
{
int x,y;
cin>>x>>y;
add(x,y);
add(y,x);
}
dij(t,d1,st1);
dij(f,d2,st2);
dij(n,d3,st3);
int res=0x3f3f3f;
int f=0;
for(int i=1;i<=n;i++)
{
int t=te+fe-s;
if(t<0) t=0;
if(!st1[i]) continue;
if(!st2[i]) continue;
if(!st3[i]) continue;
f=1;
res=min(res,d1[i]*te+d2[i]*fe+d3[i]*t);
}
if(f==0) cout<<-1;
else cout<<res;
return 0;
}
```
最后一个样例过不了说运行错误有没有大佬帮忙看看
跪谢😢😢
```cpp
#include<bits/stdc++.h>
using namespace std;
const int N=41000;
int e[N],h[N],idx=0,ne[N];
typedef long long ll;
int te,fe,s;
int t,f,n,m;
int d1[N],d2[N],d3[N];
bool st1[N],st2[N],st3[N];
typedef pair<int,int> pll;
void add(int a,int b)
{
e[idx]=b,ne[idx]=h[a],h[a]=idx++;
}
void dij(int x,int (&d)[N],bool(&st)[N])
{
memset(st,false,sizeof st);
memset(d,0x3f3f3f3f,sizeof d);
d[x]=0;
priority_queue<pll,vector<pll>,greater<pll>> q;
q.push({d[x],x});
while(q.size())
{
auto t=q.top();
q.pop();
int v=t.second;
if(st[v]) continue;
st[v]=true;
for(int i=h[v];i!=-1;i=ne[i])
{
int j=e[i];
if(d[j]>d[v]+1)
{
d[j]=d[v]+1;
q.push({d[j],j});
}
}
}
}
int main( )
{
memset(h,-1,sizeof h);
cin>>te>>fe>>s;
cin>>t>>f>>n>>m;
while(m--)
{
int x,y;
cin>>x>>y;
add(x,y);
add(y,x);
}
dij(t,d1,st1);
dij(f,d2,st2);
dij(n,d3,st3);
int res=0x3f3f3f;
int f=0;
for(int i=1;i<=n;i++)
{
int t=te+fe-s;
if(t<0) t=0;
if(!st1[i]) continue;
if(!st2[i]) continue;
if(!st3[i]) continue;
f=1;
res=min(res,d1[i]*te+d2[i]*fe+d3[i]*t);
}
if(f==0) cout<<-1;
else cout<<res;
return 0;
}
```
最后一个样例过不了说运行错误有没有大佬帮忙看看
跪谢😢😢