Submission #1320465

#TimeUsernameProblemLanguageResultExecution timeMemory
1320465OgradLTug of War (BOI15_tug)C++20
18 / 100
45 ms444 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...