求助WA
查看原帖
求助WA
271736
Daidly楼主2021/7/20 20:27
#include<bits/stdc++.h>
using namespace std;
const int MAXN=10005;
const int MAXM=100005;
struct node{
	int from,to,next;
}e[MAXM],e1[MAXM];
int head[MAXN],num;
int head1[MAXN],num1;
bool instack[MAXN];
int s[MAXN],len;
int low[MAXN];
int cnt;
int belong[MAXN];
int n,m;
int f[MAXN];
vector<int>edge[MAXM];
int in[MAXN],ans[MAXN],num2;
int w[MAXN],p[MAXN];
int maxn;
void add(int u,int v){
	e[++num].from=u;
    e[num].to=v;
    e[num].next=head[u];
    head[u]=num;
}
void add1(int u,int v){
    e1[++num1].from=u;
    e1[num1].to=v;
    e1[num1].next=head1[u];
    head1[u]=num1;
}
int dfn[MAXN],tot;
void dfs(int x){
	dfn[x]=low[x]=++tot;
	s[++len]=x;
	instack[x]=1;
    for(int i=head[x];i;i=e[i].next){
    	int y=e[i].to;
    	if(!dfn[y]){
    		dfs(y);
    		low[x]=min(low[x],low[y]);
		}else{
		    if(instack[y])low[x]=min(low[x],dfn[y]);
		}
	}
	if(dfn[x]==low[x]){
	    cnt++;
	    while(s[len]!=x){
	    	belong[s[len]]=cnt;
	    	instack[s[len]]=0;
	    	p[s[len]]=x;
	    	w[x]+=w[s[len]];
	    	len--;
		}
		instack[x]=0;
		belong[x]=cnt;
		p[s[len]]=x;
		len--;
	}
}
void topo(){
	queue<int>q;
	for(int i=1;i<=n;++i){
		if(p[i]==i&&!in[i]){
            q.push(i);
            break;
        }
	}
    while(!q.empty()){
    	int u=q.front();
    	q.pop();
    	ans[++num2]=u;
    	for(int i=0;i<edge[u].size();++i){
    		int v=edge[u][i];
    		in[v]--;
    		if(!in[v])q.push(v);
		}
	}
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;++i){
		cin>>w[i];
	}
	for(int i=1;i<=m;++i){
		int u,v;
		cin>>u>>v;
		add(u,v);
	}
	for(int i=1;i<=n;++i){
		if(!dfn[i])dfs(i);
	}
	for(int i=1;i<=num;++i){
		if(belong[e[i].from]!=belong[e[i].to]){
			int u=e[i].from,v=e[i].to;
			in[belong[v]]++;
			edge[u].push_back(v);
			edge[v].push_back(u);
		}
	}
	topo();
	for(int i=1;i<=cnt;++i){
		int tmp=ans[i];
		f[tmp]=w[tmp];
		for(int j=1;j<edge[i].size();++j){
			f[tmp]=max(f[tmp],f[edge[tmp][j-1]]+w[tmp]);
		}
	}
	for(int i=1;i<=cnt;++i){
		maxn=max(maxn,f[i]);
	}
	cout<<maxn<<endl;
	return 0;
}
2021/7/20 20:27
加载中...