提出 #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 |
| 結果 |
|
|
| セット名 |
テストケース |
| 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 |