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...