Submission #681928

#TimeUsernameProblemLanguageResultExecution timeMemory
681928MilosMilutinovicTug of War (BOI15_tug)C++14
23 / 100
381 ms5476 KiB
#include <iostream> #include <cstdio> #include <cstdlib> #include <algorithm> #include <cmath> #include <vector> #include <set> #include <map> #include <unordered_set> #include <unordered_map> #include <queue> #include <ctime> #include <cassert> #include <complex> #include <string> #include <cstring> #include <chrono> #include <random> #include <bitset> #include <array> using namespace std; typedef long long ll; const int N = 30333; int n, k; int l[2 * N]; int r[2 * N]; int s[2 * N]; vector<int> g[4 * N]; int ver; int pos; bool was[4 * N]; ll sum[2]; void addEdge(int v, int u) { g[v].push_back(u); g[u].push_back(v); } void dfs(int v) { if (v < 2 * n) { sum[ver & 1] += s[v]; ver++; } else pos++; was[v] = true; for (int u : g[v]) if (!was[u]) dfs(u); } int main() { // freopen("input.txt", "r", stdin); // freopen("output.txt", "w", stdout); scanf("%d%d", &n, &k); assert(k >= 0); for (int i = 0; i < 2 * n; i++) { scanf("%d%d%d", &l[i], &r[i], &s[i]); --l[i];--r[i]; addEdge(i, 2 * n + l[i]); addEdge(i, 3 * n + r[i]); } vector<int> diff; for (int i = 0; i < 2 * n; i++) if (!was[i]) { ver = 0; pos = 0; sum[0] = 0; sum[1] = 0; dfs(i); diff.push_back(sum[0] - sum[1]); if (ver > pos) { printf("NO\n"); return 0; } } bitset<40 * N + 1> dp; dp[20 * N] = 1; for (int x : diff) { x = abs(x); dp = ((dp >> x) | (dp << x)); } bool ok = false; for (int i = 0; i <= k; i++) if (dp[20 * N + i] || dp[20 * N - i]) ok = true; if (ok) printf("YES\n"); else printf("NO\n"); return 0; }

Compilation message (stderr)

tug.cpp: In function 'int main()':
tug.cpp:57:7: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   57 |  scanf("%d%d", &n, &k);
      |  ~~~~~^~~~~~~~~~~~~~~~
tug.cpp:60:8: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   60 |   scanf("%d%d%d", &l[i], &r[i], &s[i]);
      |   ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...