Submission #851126

#TimeUsernameProblemLanguageResultExecution timeMemory
851126ItamarPaths (RMI21_paths)C++14
56 / 100
599 ms3668 KiB
// greedy cat.cpp : This file contains the 'main' function. Program execution begins and ends there. // #include <iostream> using namespace std; #include <vector> #define ll long long #define pll pair<ll,ll> #define vll vector<ll> #include <queue> const int siz = 2000; vector<pll> fr[siz]; ll ans[siz]; int N,K; #include <algorithm> #include <set> pll dfs(int i, vector<pll>&pad,vector<vll>&vec) { pll ansi={0,i}; for (pll j: fr[i]) { if (j.first != pad[i].first) { pad[j.first] = { i,j.second }; pll k =dfs(j.first, pad, vec); //s.insert({ -k.first - j.second,k.second }); vec.push_back({ -k.first - j.second,k.second,i }); ansi = max(ansi, { k.first + j.second,k.second }); } } return ansi; } bool visi[siz][siz]; void calc(int r) { //vector<vector<bool>> visi(N, vector<bool>(N)); set<pll> s; vector<vll> vec; vector<pll> pad(N,{-1,-1}); dfs(r,pad,vec); sort(vec.begin(), vec.end()); //for (pll p : vec)s.insert(p); vector<bool> vis(N); vis[r] = 1; int it = 0; vector<pll> cl; for (int i = 0; i < K; i++) { if (it == vec.size())break; while (visi[vec[it][1]][vec[it][2]]){ it++; if (it == vec.size())break; } if (it == vec.size())break; //visi[vec[it][1]][vec[it][2]] = 1; //vis[vec[it][2]] = 1; vll v = vec[it]; ans[r] -= v[0]; ll cur = 0; int x = v[1]; while (!vis[x]) { cur += pad[x].second; vis[x] = 1; visi[v[1]][pad[x].first] = 1; cl.push_back({ v[1],pad[x].first }); x = pad[x].first; //if (x == r)break;else x = pad[x].first; } } for (pll p : cl)visi[p.first][p.second] = 0; } int main() { int n,k; cin >> n >> k; N = n, K =k; for (int i = 0; i < n - 1; i++) { int x, y, c; cin >> x >> y >> c; x--, y--; fr[x].push_back({ y,c }); fr[y].push_back({ x,c }); } for(int r = 0; r < n; r++)calc(r); for (int i = 0; i < n; i++)cout << ans[i] << "\n"; } // Run program: Ctrl + F5 or Debug > Start Without Debugging menu // Debug program: F5 or Debug > Start Debugging menu // Tips for Getting Started: // 1. Use the Solution Explorer window to add/manage files // 2. Use the Team Explorer window to connect to source control // 3. Use the Output window to see build output and other messages // 4. Use the Error List window to view errors // 5. Go to Project > Add New Item to create new code files, or Project > Add Existing Item to add existing code files to the project // 6. In the future, to open this project again, go to File > Open > Project and select the .sln file

Compilation message (stderr)

Main.cpp: In function 'void calc(int)':
Main.cpp:45:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::vector<long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   45 |         if (it == vec.size())break;
      |             ~~~^~~~~~~~~~~~~
Main.cpp:48:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::vector<long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   48 |             if (it == vec.size())break;
      |                 ~~~^~~~~~~~~~~~~
Main.cpp:50:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::vector<long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   50 |         if (it == vec.size())break;
      |             ~~~^~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...