记录编号 113258 评测结果 AAWWWAWWW
题目名称 工程规划 最终得分 33
用户昵称 Gravatarfeng 是否通过 未通过
代码语言 C++ 运行时间 0.007 s
提交时间 2014-07-20 16:03:15 内存使用 5.15 MiB
显示代码纯文本
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
struct node{
	int x,nex;
}a[1100];
struct edge{
	int x,y,v,nex;
}e[41000];
bool f[1100];
int p,n,X,Y,m;
int dist[1100];
int queue[1100000];


void add(int x,int y,int v)
{
	p++;
	e[p].nex=a[x].nex;
	e[p].x=x;
	e[p].v=v;
	e[p].y=y;
	a[x].nex=p;
}
bool spfa()
{
	for (int i=1;i<=n;i++)
		dist[i]=100000000;
	dist[0]=0;
	memset(f,false,sizeof(f));
	f[0]=true;
	int head=0;
	int tail=0;
	queue[++tail]=0;
	while(head<tail)
	{
		int x=queue[++head];
		f[x]=false;
		int t=a[x].nex;
		while (t)
		{
			if (dist[x]+e[t].v>dist[e[t].y] || dist[e[t].y]==100000000)
			{
				dist[e[t].y]=e[t].v+dist[x];
				if (!f[e[t].y])
				{
					queue[++tail]=e[t].y;
					f[e[t].y]=true;
				}
			}
			t=e[t].nex;
		}
		if (tail>=(n+p)*100) return false;
	}
	return true;
}
int main()
{
	freopen("work.in","r",stdin);
	freopen("work.out","w",stdout);
	scanf("%d%d",&n,&m);
	int x,y,v;
	for (int i=1;i<=m;i++)
	{
		scanf("%d%d%d",&x,&y,&v);
		add(x,y,-v);
	}
	for (int i=1;i<=n;i++)
		add(0,i,0);
//	for (int i=2;i<=n;i++)
//		add(i,i-1,0);
	if (spfa())
	{
//	spfa();
		int MAXN=-100000000;
		int MINN=100000000;
	//	for (int i=1;i<=n;i++)
	//		if (dist[i]==100000000)dist[i]=0;
		for (int i=1;i<=n;i++)
		{
			if(dist[i]>MAXN)MAXN=dist[i];
			if(dist[i]<MINN)MINN=dist[i];
		}
		for (int i=1;i<=n;i++)
			printf("%d\n",dist[i]-MINN);
	}
	else
	{
		printf("NO SOLUTION\n");
	}
	return 0;
	
}