记录编号 138212 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 月考统计 最终得分 100
用户昵称 Gravatarggwdwsbs 是否通过 通过
代码语言 C++ 运行时间 0.604 s
提交时间 2014-11-05 19:21:53 内存使用 0.36 MiB
显示代码纯文本
//首先把不等式反过来,加入(24-29行);然后把每个节点接到0上;最后一遍spfa求最长路;
#include<stdio.h>
#include<cstring>
#include<queue>
#include<vector>
using namespace std;
vector<int>a[1001];
vector<int>b[1001];
queue<int>q;
int d[1001];
int n,m;
int l,r1,data;
int r[10001];
bool p[1001];
int t[1001];
bool p1=0;
int main()
{
	freopen("ExamStat.in","r",stdin);
	freopen("ExamStat.out","w",stdout);
	scanf("%d%d",&n,&m);
	for(int i=0;i<=n;i++)
	 a[i].push_back(0),b[i].push_back(0);
	for(int i=1;i<=m;i++)
	{
		scanf("%d%d%d",&l,&r1,&data);
		a[l][0]++;
		a[l].push_back(r1);
		b[l].push_back(-data);
	}
	memset(d,-127/3,sizeof(d));
	a[0][0]=n;
	for(int i=1;i<=n;i++)
	{
		a[0].push_back(i);
		b[0].push_back(0);
		//for(int j=1;j<=a[i][0];j++)
		 //printf("%d ",a[i][0]);
		//printf("\n");
	}
	//for(int i=1;i<=n;i++)
	//if(r[l]==0)
	//{
		q.push(0);
		p[0]=1;
		t[0]++;
		d[0]=0;
		while(q.size()>0)
		{
			int u=q.front();
			//printf("%d\n",u);
			p[u]=0;
			q.pop();
			if(t[u]>n-1)//判环;
			{
				p1=1;
				break;
			}
			for(int j=1;j<=a[u][0];j++)
			 if(d[a[u][j]]<d[u]+b[u][j])
			{
				d[a[u][j]]=d[u]+b[u][j];
				//printf("%d %d %d %d %d %d\n",u,d[a[u][j]],d[u],b[u][j],a[u][j]);
				if(!p[a[u][j]])
				{
					q.push(a[u][j]);
					p[a[u][j]]=1;
					t[a[u][j]]++;
				}
			}
			//printf("%d %d\n",u,d[u]);
		}
		if(p1)
		{
			printf("SOMEONE LAY!");
			//while(1);
			return 0;
		}
	//}
	for(int i=1;i<=n;i++)
	{
		printf("%d ",d[i]);
	}
	//while(1);
}