求助orz
查看原帖
求助orz
286800
永夜狂兽楼主2020/8/20 17:40

第一次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吗

2020/8/20 17:40
加载中...