求助
查看原帖
求助
536098
Alan_W楼主2023/2/19 11:16
#include<bits/stdc++.h>
using namespace std;
int tail[100100],head[100100],nex[100100],tot;
int tim[100100],in[100100],q[100100],f=1,r,sum[100100],ans;
void add(int u,int v)
{
	tail[++tot]=v;
	nex[tot]=head[u];
	head[u]=tot;
}
int main()
{
	int n,m;
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		cin>>tim[i];
	}
	while(m--)
	{
		int u,v;
		cin>>u>>v;
		add(u,v);
		in[v]++;
	}
	for(int i=1;i<=n;i++)
	{
		if(in[i]==0)
		{
			q[++r]=i;
		}
	}
	while(f<=r)
	{
		int t=q[f];
		for(int i=head[t];i;i=nex[i])
		{
			int ed=tail[i];
			in[ed]--;
			if(in[ed]==0)	q[++r]=ed;	
			sum[ed]=max(sum[ed],sum[t]+tim[ed]);
		}
		f++;
	}
	for(int i=1;i<=n;i++)
	{
		ans=max(ans,sum[i]);
	}
	cout<<ans;
	return 0;
}
2023/2/19 11:16
加载中...