比赛 |
20121009 |
评测结果 |
AWWWWWAAA |
题目名称 |
最长路 |
最终得分 |
44 |
用户昵称 |
万里长城 |
运行时间 |
0.080 s |
代码语言 |
C++ |
内存使用 |
11.92 MiB |
提交时间 |
2012-10-09 19:59:34 |
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <queue>
#define rep(i, n) for (int i = 0; i < (n); i++)
#define clr(x, n) memset(x, n, sizeof(x))
#define maxn 1505
using namespace std;
void setIO(string name) {
string in_f = name + ".in";
string out_f = name + ".out";
freopen(in_f.c_str(), "r", stdin);
freopen(out_f.c_str(), "w", stdout);
}
int map[maxn][maxn];
int n, m;
int dis[maxn];
bool visit[maxn];
queue<int> que;
void init() {
clr(dis, 0);
clr(visit, false);
scanf("%d%d", &n, &m);
rep(i, n) rep(j, n) map[i][j] = 1000000001;
int x, y, z;
rep(i, m) {
scanf("%d%d%d", &x, &y, &z);
x--;
y--;
map[x][y] = -z;
}
}
void insert(int x) {
if (!visit[x]) que.push(x);
visit[x] = true;
}
void spfa() {
insert(0);
while(!que.empty()) {
int t = que.front();
que.pop();
rep(i, n) {
if (dis[t] + map[t][i] < dis[i]) {
dis[i] = dis[t] + map[t][i];
insert(i);
}
}
visit[t] = false;
}
}
void output() {
if (!dis[n - 1]) printf("%d\n", -1);
else printf("%d\n", -dis[n - 1]);
}
void solve() {
spfa();
output();
}
int main() {
setIO("longest");
init();
solve();
return 0;
}