样例没过+提高N的范围=AC
查看原帖
样例没过+提高N的范围=AC
205782
R浩轩泽Anmicius楼主2020/6/29 17:24

磕了一节课拓扑排序,样例还是WA ~~~~QAQ~~~~,提交的时候显示两个点RE。这时旁边的dalao建议我把N的范围调高

#define N 1000005

然后?然后我A了 ~~~~在样例还是WA的情况下~~~~

代码奉上:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
#define N 1000005
#define E 10000005
int n,num,head[N],s,ss,in[N],ti[N],f[N],ans;//s-序号 ss-前驱 in-入度 ti-花费的时间  f-最早完成时间 
queue<int>q;
struct node{
	int to;
	int next;
}edge[N];
inline void Addedge(int u,int v)
{
	edge[++num].to=v;
	edge[num].next=head[u];
	head[u]=num;
}
int main()
{
	ios::sync_with_stdio(false);
	memset(head,-1,sizeof(head));
	memset(f,0,sizeof(f));
	memset(in,0,sizeof(in));
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>s>>ti[s];
		do{
			cin>>ss;
			if(!ss)break;
			Addedge(ss,s);
			in[s]++;
		}while(ss);
	}
	for(int i=1;i<=n;i++)
	if(!in[i])
	{
		q.push(i);
		f[i]=ti[i];
	}
	while(!q.empty())
	{
		int now=q.front();
		q.pop();
		for(int i=head[now];i!=-1;i=edge[i].next)
		{
			int to=edge[i].to;
			in[to]--;
			if(!in[to])q.push(to);
			f[to]=max(f[to],f[now]+ti[to]);
		}
	}
	for(int i=1;i<=n;i++)
	ans=max(ans,f[i]);
	cout<<ans<<'\n';
	return 0;
}

洛谷的奇妙数据

题目:杂物

2020/6/29 17:24
加载中...