Submission #209275

#TimeUsernameProblemLanguageResultExecution timeMemory
209275stefdascaTug of War (BOI15_tug)C++14
100 / 100
2102 ms11256 KiB
#include<bits/stdc++.h> #define pb push_back #define fi first #define se second using namespace std; int n, maxdif, skill[60002]; set<int> v[60002]; pair<int, int> vals[60002]; bool viz[60002]; int dif; bitset<20 * 60002> dp; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cin >> n >> maxdif; for(int i = 1; i <= n+n; ++i) { int a, b; cin >> a >> b >> skill[i]; b += n; v[a].insert(i); v[b].insert(i); vals[i] = {a, b}; } deque<int> d; for(int i = 1; i <= n+n; ++i) if(v[i].size() < 2) d.pb(i), viz[i] = 1; while(!d.empty()) { int poz = d[0]; d.pop_front(); if(v[poz].size() == 0) { cout << "NO\n"; return 0; } int nr = *v[poz].begin(); v[vals[nr].fi].erase(nr); v[vals[nr].se].erase(nr); if(v[vals[nr].fi].size() < 2 && !viz[vals[nr].fi]) { viz[vals[nr].fi] = 1; d.pb(vals[nr].fi); } if(v[vals[nr].se].size() < 2 && !viz[vals[nr].se]) { viz[vals[nr].se] = 1; d.pb(vals[nr].se); } if(poz <= n) dif += skill[nr]; else dif -= skill[nr]; } vector<int> ruk; for(int i = 1; i <= n+n; ++i) { if(v[i].size() < 2) continue; int valas = 0; int j = i; while(v[j].size()) { int val = *v[j].begin(); if(j <= n) valas += skill[val]; else valas -= skill[val]; v[vals[val].fi].erase(val); v[vals[val].se].erase(val); if(j == vals[val].fi) j = vals[val].se; else j = vals[val].fi; } valas = abs(valas); dif -= valas; ruk.pb(2 * valas); } dif += 20 * n; dp[dif] = 1; for(int i = 0; i < ruk.size(); ++i) dp = dp | (dp << ruk[i]); bool ok = 0; for(int i = 20 * n - maxdif; i <= 20 * n + maxdif; ++i) ok |= dp[i]; if(ok) cout << "YES\n"; else cout << "NO\n"; return 0; }

Compilation message (stderr)

tug.cpp: In function 'int main()':
tug.cpp:88:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i = 0; i < ruk.size(); ++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...