結果

問題 No.844 split game
ユーザー pockynypockyny
提出日時 2019-06-28 22:09:46
言語 C++17
(gcc 13.3.0 + boost 1.87.0)
結果
AC  
実行時間 117 ms / 2,000 ms
コード長 701 bytes
コンパイル時間 839 ms
コンパイル使用メモリ 81,620 KB
最終ジャッジ日時 2025-01-07 05:32:51
ジャッジサーバーID
(参考情報)
judge5 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 4
other AC * 56
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <iostream>
#include <vector>
#include <set>
using namespace std;
typedef long long ll;
vector<pair<ll,ll>> v[100010];
set<ll> s;
ll dp[100010],b[100010];
int main(){
	ll i,j,n,m,a;
	cin >> n >> m >> a;
	for(i=0;i<m;i++){
		ll l,r,p;
		cin >> l >> r >> p; l--;
		v[r].push_back({l,p});
		if(r==n){
			s.insert(l);
			b[l] = p;
		}
	}
	for(i=1;i<=n;i++){
		dp[i] = -a;
	}
	dp[0] = 0;
	ll mx = 0;
	for(i=1;i<n;i++){
		dp[i] = mx - a;
		for(j=0;j<v[i].size();j++){
			dp[i] = max(dp[i],dp[v[i][j].first] + v[i][j].second - a);
		}
		mx = max(mx,dp[i]);
	}
	ll ans = -100000000000000;
	for(i=0;i<n;i++){
		if(s.count(i)){
			dp[i] += b[i];
		}
		ans = max(ans,dp[i]);
	}
	cout << ans << endl;
}
		
0