This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
using ll = long long;
using pii = pair<int, int>;
int main()
{
int n, m, h;
cin >> n >> m >> h;
vector<pii> edge[n];
// cerr << "done\n";
for(int i = 0; i < n-1; i++)
{
for(int e = 0; e < h; e++)
{
int j, w;
cin >> j >> w;
if(j <= i) continue;
edge[i].push_back({j, w});
}
sort(edge[i].begin(), edge[i].end(), [] (pii x, pii y)
{
return x.second < y.second;
});
}
ll dp[m][n];
for(int d = 0; d < m; d++)
for(int i = 0; i < n; i++)
dp[d][i] = 0;
dp[0][0] = 1;
ll res[m];
for(int d = 0; d < m; d++)
{
for(int i = 0; i < n; i++)
{
// cerr << d << ' ' << i << " : " << dp[d][i] << '\n';
res[d] = min(5'0000'0001LL, dp[d][i]);
if(d >= 1)
{
dp[d][i] = min(dp[d-1][i] + dp[d][i], 5'0000'0001LL);
}
for(pii e : edge[i])
{
if(d + e.second >= m) break;
dp[d + e.second][e.first] = min(dp[d + e.second][e.first] + dp[d][i], 5'0000'0001LL);
}
}
}
// cout << dp[0][n-1] << ' ';
// for(int d )
// for(int d = 1; d < m; d++) cout << min(dp[d][n-1] - dp[d-1][n-1], 5'0000'0001LL) << ' ';
// cout << '\n';
for(int d = 0; d < m; d++) cout << res[d] << ' ';
cout << '\n';
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |