最长路spfa

https://www.luogu.com.cn/problem/P1807

int n,m;
int h[N],e[N],ne[N],w[N],idx;
void add(int a,int b,int c) {
	e[idx]=b,w[idx]=c,ne[idx]=h[a],h[a]=idx++;
}

int dfn[N],cnt;
int vis[N],dis[N];

void spfa() {
	queue<int>q;
	for(int i=1; i<=n; i++)dis[i]=-INF;
	dis[1]=0;vis[1]=1;q.push(1);
	while(q.size()) {
		int t=q.front(); q.pop();
		vis[t]=0; //
		for(int i=h[t]; ~i; i=ne[i]) {
			int j=e[i];
			if(dis[j] < dis[t]+w[i]) {
				dis[j] = dis[t]+w[i];
				if(!vis[j])q.push(j),vis[j]=1;
			}
		}
	}
}
原文地址:https://www.cnblogs.com/LaiYiC/p/15188817.html