Submission #1307549

#TimeUsernameProblemLanguageResultExecution timeMemory
1307549shisp1Tug of War (BOI15_tug)C++20
23 / 100
956 ms5292 KiB
#include <bits/stdc++.h> #define ll long long #define pb push_back #define int long long using namespace std; const int mod = 1e9+7; const int N = 2e5+5; int n,k, l[N],r[N],s[N]; vector<int>g[N]; int was[N], mt[N]; bool kuhn(int v) { if(was[v]) return false; was[v] = true; for(auto to:g[v]) { if(mt[to] == -1 || kuhn(mt[to])) { mt[to] = v; return true; } } return false; } void solve() { cin >> n >> k; int tot = 0; for(int i = 1;i<=2*n;i++) { cin >> l[i] >> r[i] >> s[i]; g[l[i]].pb(i); g[n+r[i]].pb(i); } if(n<=10) { for(int mask = 0;mask<(1<<(2*n));mask++) { if(__builtin_popcount(mask)!=n) continue; vector<int>left(n+1), right(n+1); bool ok = true; int sum1 = 0, sum2 = 0; for(int i = 0;i<2*n;i++) { if(mask&(1<<i)) { if(right[r[i]]) { ok = false; break; } right[r[i]] = true; sum2+=s[i]; } else { if(left[l[i]]) { ok = false; break; } left[l[i]] = true; sum1+=s[i]; } } if(!ok || abs(sum1-sum2)>k) { continue; } cout << "YES\n"; return; } cout << "NO\n"; return; } memset(was,0,sizeof(was)); memset(mt,-1,sizeof(mt)); int cnt = 0; for(int i = 1;i<=2*n;i++) { memset(was,0,sizeof(was)); if(kuhn(i)) cnt++; } cout << (cnt == 2*n ? "YES" : "NO") ; } signed main() { ios_base::sync_with_stdio(0); int tt=1; //cin >> tt; while(tt--) { solve(); } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...