#include <algorithm>
#include <array>
#include <cassert>
#include <iostream>
#include <vector>
using namespace std;
int main(){
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int N, K;
cin >> N >> K;
assert(N <= 10);
vector<vector<array<int, 3>>> adj(2*N);
vector<array<int, 3>> edges;
vector<int> deg(2*N, 0);
int l, r, s;
for (int i = 0; i < 2*N; i++){
cin >> l >> r >> s;
--l, --r;
r += N;
edges.push_back({l, r, s});
adj[l].push_back({r, s, i});
adj[r].push_back({l, s, i});
deg[l]++;
deg[r]++;
}
if (any_of(deg.begin(), deg.end(), [](int x){ return x == 0; })){
cout << "NO\n";
return 0;
}
int ok = 0;
for (int mask = 0; mask < (1 << (2*N)); mask++){
vector<int> used(2*N, 0);
array<int, 2> teams = {0, 0};
int ok2 = 1;
for (int i = 0; i < 2*N; i++){
int idx = (mask & (1 << i)) != 0;
if (used[edges[i][idx]]){
ok2 = 0;
break;
}
used[edges[i][idx]] = 1;
teams[edges[i][idx] >= N] += edges[i][2];
}
if (ok2){
ok |= abs(teams[0] - teams[1]) <= K;
}
}
if (ok){
cout << "YES\n";
} else {
cout << "NO\n";
}
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... |