救救孩子吧,一直输出0
查看原帖
救救孩子吧,一直输出0
230808
Zxsoul楼主2020/10/11 16:23
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <string.h>
#include <queue>
using namespace std;
const int manx  = 1e6;
queue<int>q;
struct Edge{
	int u;
	int v;
	int w;
	int nxt;
};
Edge e[manx];
int head[manx],cnt,n,m;
void add(int u,int v,int w){
	e[++cnt].nxt = head[u];
	e[cnt].u = u;
	e[cnt].v = v;
	e[cnt].w = w;
	head[u] = cnt;
}
int dis[manx],in[manx];
bool vis[manx];
bool spfa(int u){
	memset(vis,false,sizeof(vis));
	vis[u] = true;
	memset(dis,-1,sizeof(dis));
	dis[u] = 0;
	memset(in,0,sizeof(in));
	in[u] = 1;
	q.push(u);
	while(!q.empty()){
		int k = q.front();
		q.pop();
		vis[k] = false;
		for (int i = head[u];i;i = e[i].nxt){
			int x = e[i].v;
			int w = e[i].w;
			if (dis[k] + w > dis[x])
			{
				dis[x] = dis[u] + w;
				if(!vis[x]){
					q.push(x);
					vis[x] = true;
					++in[x]; 
					if(in[x] > n + 1){
						return true;
					}
				}
			}
		}
		return false;
	}
}
int main(){
	cin >> n >> m;
	for(int i = 1;i <= m; i++){
		int a,b,c;
		cin >> a >> b >> c;
		add(a,b,-c);
	}
	for(int i = 1;i <= n;i++)
	add(0,i,0);
	if(spfa(0)) cout<<"NO"<<endl;
	else
	for (int i = 1;i <= n; i++)
	cout<<dis[i]<<" ";
	return 0;
}
2020/10/11 16:23
加载中...