Submission #698593

#TimeUsernameProblemLanguageResultExecution timeMemory
698593vjudge1Torrent (COI16_torrent)C++17
100 / 100
115 ms26616 KiB
/* ...... */ #include <bits/stdc++.h> using namespace std; #define inl inline typedef long long ll; // typedef unsigned long long ull; // typedef __int128 lll; // typedef long double llf; typedef pair <int, int> pint; #define fst first #define scd second #define all(p) begin (p), end (p) #define empb emplace_back using vint = vector <int>; constexpr int N = 3e5 + 10; int n, x, y, a, b, seq[N], m; vint e[N]; bool ban[N]; int f[N], ffr[N]; bool sagasu (int x, int fr) { if (x == a) return seq[++m] = a, ban[x] = 1; for (const int y : e[x]) if (y != fr && sagasu (y, x) == 1) return seq[++m] = x, ban[x] = 1; return 0; } void dp (int x, int fr) { vint lst; int c = 0; for (const int y : e[x]) if (y != fr && !ban[y]) dp (y, x), lst.empb (f[y]); sort (all (lst), greater <int> ()); for (const int t : lst) if (f[x] <= t + ++c) f[x] = t + c, ffr[x] = t; } template <int dt> inl int imple (int lmt) { for (int i = dt == 1 ? 1 : m, c = 0; i && i <= m; i += dt, ++c) { int x = seq[i]; if (f[x] > lmt) return c; if (f[x] == lmt) lmt = ffr[x] - 1; else --lmt; } return m; } int main () { /* */ scanf ("%d%d%d", &n, &a, &b); for (int i = 1; i < n; ++i) scanf ("%d%d", &x, &y), e[x].empb (y), e[y].empb (x); sagasu (b, 0); for (int i = 1; i <= m; ++i) dp (seq[i], 0); int l = 0, r = n, mid; while (l < r) { mid = l + r >> 1; if (imple <1> (mid) + imple <-1> (mid) >= m) r = mid; else l = mid + 1; } printf ("%d", l); return 0; }

Compilation message (stderr)

torrent.cpp: In function 'int main()':
torrent.cpp:62:11: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   62 |   mid = l + r >> 1;
      |         ~~^~~
torrent.cpp:53:8: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   53 |  scanf ("%d%d%d", &n, &a, &b);
      |  ~~~~~~^~~~~~~~~~~~~~~~~~~~~~
torrent.cpp:55:9: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   55 |   scanf ("%d%d", &x, &y),
      |   ~~~~~~^~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...