第一次90,一个RE
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N=2e5+5,M=1e6+5;
ll nm,n,s[N],r[N],h1[N],e1[M],h2[N],e2[M],ne[M],f[N],d[N];
deque<int>q;
inline ll in()
{
char c;
while((c=getchar())>'9'||c<'0');
ll s=c^48;
while((c=getchar())<='9'&&c>='0')
s=(s<<1)+(s<<3)+(c^48);
return s;
}
void sp()
{
while(q.size())
{
int x=q.front();ll S=s[x];
f[x]=0;q.pop_front();
for(int i=h1[x];i<h1[x]+r[x];i++)
{
S+=d[e1[i]];
if(S>=d[x])
break;
}
if(S<d[x])
for(int i=h2[x];i;i=ne[i])
if(!f[e2[i]])
q.push_back(e2[i]),f[e2[i]]=1;
d[x]=min(d[x],S);
}
}
int main()
{
n=in();
for(int i=1;i<=n;i++)
{
s[i]=in();d[i]=in();q.push_back(i);
r[i]=in();h1[i]=++nm;
for(int j=1;j<=r[i];nm++,j++)
e1[nm]=in(),
e2[nm]=i,ne[nm]=h2[e1[nm]],h2[e1[nm]]=nm;
}
sp();
printf("%lld\n",d[1]);
return 0;
}
第二次加了一个SLF优化成了50,都是RE
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N=2e5+5,M=1e6+5;
ll nm,n,s[N],r[N],h1[N],e1[M],h2[N],e2[M],ne[M],f[N],d[N];
deque<int>q;
inline ll in()
{
char c;
while((c=getchar())>'9'||c<'0');
ll s=c^48;
while((c=getchar())<='9'&&c>='0')
s=(s<<1)+(s<<3)+(c^48);
return s;
}
void sp()
{
while(q.size())
{
int x=q.front();ll S=s[x];
f[x]=0;q.pop_front();
for(int i=h1[x];i<h1[x]+r[x];i++)
{
S+=d[e1[i]];
if(S>=d[x])
break;
}
if(S<d[x])
for(int i=h2[x];i;f[e2[i]]=1,i=ne[i])
if(!f[e2[i]])
if(d[e2[i]]<d[q.front()]&&q.size())
q.push_front(e2[i]);
else
q.push_back(e2[i]);
d[x]=min(d[x],S);
}
}
int main()
{
n=in();
for(int i=1;i<=n;i++)
{
s[i]=in();d[i]=in();q.push_back(i);
r[i]=in();h1[i]=++nm;
for(int j=1;j<=r[i];nm++,j++)
e1[nm]=in(),
e2[nm]=i,ne[nm]=h2[e1[nm]],h2[e1[nm]]=nm;
}
sp();
printf("%lld\n",d[1]);
return 0;
}
请问是卡SPFA吗