#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 time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |