记录编号 137684 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 月考统计 最终得分 100
用户昵称 GravatarAsm.Def 是否通过 通过
代码语言 C++ 运行时间 0.646 s
提交时间 2014-11-05 02:31:04 内存使用 0.32 MiB
显示代码纯文本
/*=============================================================================================================================*/
/*======================================================Code by Asm.Def========================================================*/
/*=============================================================================================================================*/
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <cctype>
#include <memory.h>
#include <vector>
#include <set>
#include <string>
#include <cstring>
#include <map>
#include <queue>
#include <deque>
#include <stack>
#include <ctime>
#include <iterator>
#include <functional>
#include <cstdlib>
using namespace std;
/*===================================================================================*/
#define forall(it,v) for(__typeof(v.begin()) it = v.begin();it < v.end();++it) 
#define pb push_back
#define REP(i,j,k) for(i = j;i <= k;++i)
#define REPD(i,j,k) for(i = j;i >= k;--i)
#define iter(v) v::iterator
typedef long long LL;
template<typename T> void getint(T &x){
	char c = getchar();
	while(!isdigit(c))c = getchar();
	x = c - '0';
	while(isdigit(c = getchar()))x = x * 10 + c - '0';
}
/*============================================================================================*/
const int maxn = 2000 + 5;
int N, M;
struct edge{
	int to, w;
	edge(int T, int W):to(T), w(W){}
};
vector<edge> adj[maxn];

queue<int> Q;
bool inQ[maxn] = {0};
int dis[maxn] = {0}, cnt[maxn] = {0};
inline void init(){
	cin >> N >> M;
	int i, x, y, a;
	while(M--){
		cin >> x >> y >> a;
		adj[x].push_back(edge(y, -a));
	}
	for(i = 1;i <= N;++i)
		Q.push(i);inQ[i] = 1;cnt[i] = 1;
}
inline void work(){
	int i, t;
	iter(vector<edge>) it;
	while(!Q.empty()){
		t = Q.front();Q.pop();inQ[t] = 0;
		for(it = adj[t].begin();it != adj[t].end();++it)
			if(dis[t] + it->w > dis[it->to]){
				dis[it->to] = dis[t] + it->w;
				if(!inQ[it->to]){
					if(cnt[it->to] == N){
						cout << "SOMEONE LAY!" << endl;
						return;
					}
					Q.push(it->to);inQ[it->to] = 1;++cnt[it->to];
				}
			}
	}
	for(i = 1;i <= N;++i)
		cout << dis[i] << ' ';
}

int main(){
	#ifdef DEBUG
	freopen("test", "r", stdin);
	#else
	freopen("ExamStat.in", "r", stdin);
	freopen("ExamStat.out", "w", stdout);
	#endif
	
	init();
	work();
	
	#ifdef DEBUG
	//cout << endl << (double)clock() / CLOCKS_PER_SEC <<endl;
	#endif
	return 0;
}