#AtCoder Beginner Contest 188E Peddler TLEになってしまう
ABC188E
こちらの問題を解いていましたが自分の実装ではTLEになってしまうため、どなたかアドバイスを頂けると幸いです。
問題文
質問内容
非連結のグラフなので0~nでループを回してdfsをしています。
更新済みの場合はskipをしています。
概ねのテストケースは通っていますがいくつかTLEになっています。
O(N+M)の実装だと思っていたのですがTLEになってしまうため、アドバイスをいただきたいです。
実装
C++
1#include <bits/stdc++.h> 2using namespace std; 3using ll = long long; 4const long long INF = 1LL << 60; 5 6int n, m; 7vector<ll> a; 8vector<vector<int>> g; 9vector<ll> dp; 10 11// 深さ優先探索 12void dfs(int v) { 13 for(auto nv:g[v]) { 14 dp[nv] = min(dp[nv], min(dp[v], a[v])); 15 dfs(nv); 16 } 17} 18 19int main() { 20 cin >> n >> m; 21 a.resize(n); 22 g.resize(n); 23 dp.resize(n, INF); 24 for(int i=0; i<n; i++) cin >> a[i]; 25 for(int i=0; i<m; i++) { 26 int x, y; 27 cin >> x >> y; 28 x--; y--; 29 g[x].push_back(y); 30 } 31 32 for(int i=0; i<n; i++) { 33 if(dp[i] != INF) continue; 34 dfs(i); 35 } 36 ll res = -INF; 37 for(int i=0; i<n; i++) { 38 res = max(res, a[i]-dp[i]); 39 } 40 cout << res << endl; 41}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/08/13 12:17 編集
2021/08/13 13:05 編集
2021/08/13 22:59