40分求助
查看原帖
40分求助
378996
UncleSam_Died楼主2023/6/26 11:02

样例都过了,自己出了几个测试点也过了,但提交WA了6个

#include<bits/stdc++.h>
using namespace std;
long long n,m;
long long T[50005];
struct Edge{
	long long v,next;
}edge[50005];
long long head[50005],ans[50005],cnt,ce,degree[50005],vis[50005];
inline void adde(long long u,long long v){
	edge[++ce].v=v;
	edge[ce].next=head[u];
	head[u]=ce;
	degree[v]++;
	vis[u]=vis[v]=1;
}
stack<long long> s;
long long answer,sum[50005];
inline void topsort(){
	long long p,q;
	for(long long i=1;i<=n;i++)
		if(!degree[i]&&vis[i]){
			s.push(i);
			sum[i]=T[i];
			while(!s.empty()){
				long long u=s.top();
				s.pop();
				ans[++cnt]=u;
				for(long long i=head[u];i;i=edge[i].next){
					long long v=edge[i].v;
					sum[v]=sum[u]+T[v];
					answer=max(sum[v],answer);
					if(!(--degree[v])) s.push(v);
				}
			}
		} 
	return;
}
int main(){
	cin>>n>>m;
	for(long long i=1;i<=n;i++){
		cin>>T[i];
	}
	for(long long u,v,i=1;i<=m;i++){
		cin>>u>>v;
		adde(u,v);
	}
	topsort();
	long long maxt=-1;
	for(long long i=1;i<=n;i++) if(!vis[i]) 	  	  maxt=max(maxt,T[i]);
	cout<<max(answer,maxt)<<endl;
	return 0;
}

2023/6/26 11:02
加载中...