提出 #9258479


ソースコード 拡げる

#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<b;i++)
#define rrep(i,a,b) for(int i=a;i>=b;i--)
#define fore(i,a) for(auto &i:a)
#define all(x) (x).begin(),(x).end()
//#pragma GCC optimize ("-O3")
using namespace std; void _main(); int main() { cin.tie(0); ios::sync_with_stdio(false); _main(); }
typedef long long ll; const int inf = INT_MAX / 2; const ll infl = 1LL << 60;
template<class T>bool chmax(T& a, const T& b) { if (a < b) { a = b; return 1; } return 0; }
template<class T>bool chmin(T& a, const T& b) { if (b < a) { a = b; return 1; } return 0; }
//---------------------------------------------------------------------------------------------------
struct UnionFind {
	using T = int;
	const T def = 0;
	T f(T a, T b) { return a + b; }
	//==========================================
	vector<int> par;
	vector<T> value;
	UnionFind() {}
	UnionFind(int NV) { init(NV); }
	void init(int NV) { par.clear(); rep(i, 0, NV) par.push_back(i); value.resize(NV, 1); }
	void reset() { rep(i, 0, par.size()) par[i] = i; }
	int operator[](int x) {
		if (par[x] == x) return x;
		else {
			int res = operator[](par[x]);
			if (res != par[x]) {
				value[res] = f(value[res], value[par[x]]);
				value[par[x]] = def;
			}
			return par[x] = res;
		}
	}
	// uf(x,y)->y
	void operator()(int x, int y) {
		x = operator[](x); y = operator[](y);
		if (x != y) {
			value[y] += value[par[x]];
			value[par[x]] = def;
			par[x] = y;
		}
	}
	T getValues(int x) { return value[operator[](x)]; };
};
/*---------------------------------------------------------------------------------------------------
            ∧_∧
      ∧_∧  (´<_` )  Welcome to My Coding Space!
     ( ´_ゝ`) /  ⌒i     @hamayanhamayan0
    /   \     | |
    /   / ̄ ̄ ̄ ̄/  |
  __(__ニつ/     _/ .| .|____
     \/____/ (u ⊃
---------------------------------------------------------------------------------------------------*/














int N, M, X[40], Y[40], C[40];
//---------------------------------------------------------------------------------------------------
double solve(int msk) {
	vector<int> points;
	rep(i, 0, N) points.push_back(i);
	rep(i, 0, M) if (msk & (1 << i)) points.push_back(i + N);
	int n = points.size();

	vector<pair<double, pair<int, int>>> edges;
	rep(i, 0, n) rep(j, i + 1, n) {
		int a = points[i];
		int b = points[j];
		double dx = X[a] - X[b];
		double dy = Y[a] - Y[b];
		double d = sqrt(dx * dx + dy * dy);
		if (C[a] != C[b]) d *= 10;
		edges.push_back({ d, {i, j} });
	}
	sort(all(edges));

	UnionFind uf(n);
	double ans = 0;
	fore(p, edges) {
		double cst = p.first;
		int a = p.second.first;
		int b = p.second.second;
		if (uf[a] != uf[b]) {
			uf(a, b);
			ans += cst;
		}
	}
	return ans;
}
//---------------------------------------------------------------------------------------------------
void _main() {
	cin >> N >> M;
	rep(i, 0, N) cin >> X[i] >> Y[i] >> C[i];
	rep(i, 0, M) cin >> X[i + N] >> Y[i + N] >> C[i + N];

	double ans = 1e30;
	rep(msk, 0, 1 << M) chmin(ans, solve(msk));
	printf("%.12f\n", ans);
}





提出情報

提出日時
問題 L - グラデーション
ユーザ hamayanhamayan
言語 C++14 (GCC 5.4.1)
得点 6
コード長 3309 Byte
結果 AC
実行時間 3 ms
メモリ 256 KiB

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 6 / 6
結果
AC × 2
AC × 31
セット名 テストケース
Sample example_01.txt, example_02.txt
All example_01.txt, example_02.txt, subtask_01_01.txt, subtask_01_02.txt, subtask_01_03.txt, subtask_01_04.txt, subtask_01_05.txt, subtask_01_06.txt, subtask_01_07.txt, subtask_01_08.txt, subtask_01_09.txt, subtask_01_10.txt, subtask_01_11.txt, subtask_01_12.txt, subtask_01_13.txt, subtask_01_14.txt, subtask_01_15.txt, subtask_01_16.txt, subtask_01_17.txt, subtask_01_18.txt, subtask_01_19.txt, subtask_01_20.txt, subtask_01_21.txt, subtask_01_22.txt, subtask_01_23.txt, subtask_01_24.txt, subtask_01_25.txt, subtask_01_26.txt, subtask_01_27.txt, subtask_01_28.txt, subtask_01_29.txt
ケース名 結果 実行時間 メモリ
example_01.txt AC 1 ms 256 KiB
example_02.txt AC 1 ms 256 KiB
subtask_01_01.txt AC 1 ms 256 KiB
subtask_01_02.txt AC 1 ms 256 KiB
subtask_01_03.txt AC 1 ms 256 KiB
subtask_01_04.txt AC 1 ms 256 KiB
subtask_01_05.txt AC 1 ms 256 KiB
subtask_01_06.txt AC 1 ms 256 KiB
subtask_01_07.txt AC 2 ms 256 KiB
subtask_01_08.txt AC 2 ms 256 KiB
subtask_01_09.txt AC 2 ms 256 KiB
subtask_01_10.txt AC 1 ms 256 KiB
subtask_01_11.txt AC 2 ms 256 KiB
subtask_01_12.txt AC 2 ms 256 KiB
subtask_01_13.txt AC 1 ms 256 KiB
subtask_01_14.txt AC 2 ms 256 KiB
subtask_01_15.txt AC 2 ms 256 KiB
subtask_01_16.txt AC 1 ms 256 KiB
subtask_01_17.txt AC 2 ms 256 KiB
subtask_01_18.txt AC 2 ms 256 KiB
subtask_01_19.txt AC 1 ms 256 KiB
subtask_01_20.txt AC 2 ms 256 KiB
subtask_01_21.txt AC 2 ms 256 KiB
subtask_01_22.txt AC 1 ms 256 KiB
subtask_01_23.txt AC 2 ms 256 KiB
subtask_01_24.txt AC 2 ms 256 KiB
subtask_01_25.txt AC 2 ms 256 KiB
subtask_01_26.txt AC 3 ms 256 KiB
subtask_01_27.txt AC 3 ms 256 KiB
subtask_01_28.txt AC 3 ms 256 KiB
subtask_01_29.txt AC 2 ms 256 KiB