89分DP求助,#3没过
  • 板块P1807 最长路
  • 楼主陈乔林
  • 当前回复1
  • 已保存回复1
  • 发布时间2022/12/3 20:32
  • 上次更新2023/10/27 00:35:07
查看原帖
89分DP求助,#3没过
105129
陈乔林楼主2022/12/3 20:32
#include<iostream>
#define maxn 1505
using namespace std;
long long n, m, x1, x2, x3, a[maxn][maxn], f[maxn];//a[][]两点间最大路径,f[]点到n点的最大路径
bool b[maxn][maxn],c[maxn];//b[][]判断两点是否相连,c[]判断点是否与n点相连
int main() {
	cin >> n >> m;
	for (int i = 1; i <= m; i++) {
		cin >> x1 >> x2 >> x3;
		if (!b[x1][x2]) {
			a[x1][x2] = x3;
			b[x1][x2] = 1;
		}
		else 
			if (x3 > a[x1][x2]) a[x1][x2] = x3;
	}
	c[n] = 1;
	for (int i = n; i >= 1; i--) {
		for (int j = 1; j < i; j++) {
			if (b[j][i]) {
				if (!c[j]) {
					f[j] = f[i] + a[j][i];
					c[j] = c[i];
				}
				else 
					if (f[i] + a[j][i] > f[j]) 
						f[j] = f[i] + a[j][i];
			}
		}
	}
	if (!c[1])
		cout << -1 << endl;
	else 
		cout << f[1] << endl;
	system("pause");
	return 0;
}
2022/12/3 20:32
加载中...