Submission #76371

#TimeUsernameProblemLanguageResultExecution timeMemory
76371tmwilliamlin168Tug of War (BOI15_tug)C++14
100 / 100
2334 ms30048 KiB
#include <bits/stdc++.h> using namespace std; const int mxN=6e4; int n, k, l[mxN], r[mxN], s[mxN], dp0; set<int> pc[mxN]; bitset<20*mxN+1> dp; queue<int> qu; vector<int> vc; void fk() { cout << "NO"; exit(0); } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin >> n >> k; n*=2; for(int i=0; i<n; ++i) { cin >> l[i] >> r[i] >> s[i], --l[i], r[i]+=n/2-1; pc[l[i]].insert(i); pc[r[i]].insert(i); } for(int i=0; i<n; ++i) { if(!pc[i].size()) fk(); else if(pc[i].size()==1) qu.push(i); } dp0=10*n; while(qu.size()) { int u=qu.front(); if(!pc[u].size()) fk(); qu.pop(); int a=*pc[u].begin(), v=u^l[a]^r[a]; dp0+=u<n/2?s[a]:-s[a]; pc[v].erase(a); if(pc[v].size()==1) qu.push(v); } for(int i=0; i<n; ++i) { if(pc[i].size()<2) continue; int c=0; for(int j=i; pc[j].size(); ) { int a=*pc[j].begin(); c+=j<n/2?s[a]:-s[a]; pc[l[a]].erase(a); pc[r[a]].erase(a); j^=l[a]^r[a]; } c=abs(c); dp0-=c; vc.push_back(2*c); } dp[dp0]=1; for(int c : vc) dp|=dp<<c; bool ok=0; for(int i=10*n-k; i<=10*n+k&&!ok; ++i) ok=dp[i]; if(!ok) fk(); cout << "YES"; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...