結果
| 問題 |
No.1365 [Cherry 1st Tune] Whose Fault?
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2021-01-20 03:13:20 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
RE
|
| 実行時間 | - |
| コード長 | 4,559 bytes |
| コンパイル時間 | 2,119 ms |
| コンパイル使用メモリ | 217,156 KB |
| 最終ジャッジ日時 | 2025-01-18 02:45:38 |
|
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 12 RE * 34 |
ソースコード
// Exported by Exporter.exe
// Included from B.cpp
// Compile flags -Wall -Wextra -Wshadow -D_GLIBCXX_ASSERTIONS -DDEBUG -ggdb3 -fmax-errors=2
#pragma GCC optimize("O3")
#include <bits/stdc++.h>
using namespace std;
#define PB push_back
#define F first
#define S second
#define MP make_pair
#define MTP make_tuple
typedef long long int ll;
constexpr int kN = int(2E5 + 10);
// constexpr int kMod = 998244353;
// constexpr int kInf = 0x3f3f3f3f
// constexpr ll kInf = 0x3f3f3f3f3f3f3f3f;
template <typename T> T ABS(T n) {return n >= 0 ? n : -n;}
// Included from C:\Users\ianli\Desktop\CP\template\Various\Fast_IO.cpp
static inline char Get_Raw_Char() {
static char buf[1 << 16], *p = buf, *end = buf;
if (p == end) {
if ((end = buf + fread(buf, 1, 1 << 16, stdin)) == buf) return '\0';
p = buf;
}
return *p++;
}
static inline int Get_Digit() {
char c = Get_Raw_Char();
while (!isdigit(c)) c = Get_Raw_Char();
return int(c - '0');
}
static inline int Get_PInt() {
char c = Get_Raw_Char();
int ret;
while (!isdigit(c)) c = Get_Raw_Char();
ret = int(c - '0');
while (isdigit(c = Get_Raw_Char())) ret = ret * 10 + int(c - '0');
return ret;
}
static inline int Get_Int() {
char c = Get_Raw_Char();
bool neg = false;
int ret;
while (!isdigit(c)) {
if (c == '-') neg = true;
c = Get_Raw_Char();
}
ret = int(c - '0');
while (isdigit(c = Get_Raw_Char())) ret = ret * 10 + int(c - '0');
if (neg) return -ret;
return ret;
}
static inline long long int Get_ll() {
char c = Get_Raw_Char();
bool neg = false;
long long int ret;
while (!isdigit(c)) {
if (c == '-') neg = true;
c = Get_Raw_Char();
}
ret = int(c - '0');
while (isdigit(c = Get_Raw_Char())) ret = ret * 10 + int(c - '0');
if (neg) return -ret;
return ret;
}
static inline long long int Get_Pll() {
char c = Get_Raw_Char();
long long int ret;
while (!isdigit(c)) c = Get_Raw_Char();
ret = int(c - '0');
while (isdigit(c = Get_Raw_Char())) ret = ret * 10 + int(c - '0');
return ret;
}
template <typename T> static inline void Read_P(T &n) {
static_assert(is_integral<T>::value);
char c = Get_Raw_Char();
while (!isdigit(c)) c = Get_Raw_Char();
n = int(c - '0');
while (isdigit(c = Get_Raw_Char())) n = n * 10 + int(c - '0');
return ;
}
template <typename T> static inline void Read(T &n) {
static_assert(is_integral<T>::value);
char c = Get_Raw_Char();
bool neg = false;
while (!isdigit(c)) {
if (c == '-') neg = true;
c = Get_Raw_Char();
}
n = int(c - '0');
while (isdigit(c = Get_Raw_Char())) n = n * 10 + int(c - '0');
if (neg) n = -n;
return ;
}
template <typename T> static inline void Read_Digit(T &n) {
static_assert(is_integral<T>::value);
char c = Get_Raw_Char();
while (!isdigit(c)) c = Get_Raw_Char();
n = int(c - '0');
return ;
}
template <typename T, typename... Targs> static inline void Read(T &n, Targs&... Fargs) {
Read(n);
return Read(Fargs...);
}
template <typename T, typename... Targs> static inline void Read_Digit(T &n, Targs&... Fargs) {
Read_Digit(n);
return Read_Digit(Fargs...);
}
template <typename T, typename... Targs> static inline void Read_P(T &n, Targs&... Fargs) {
Read_P(n);
return Read_P(Fargs...);
}
// End of C:\Users\ianli\Desktop\CP\template\Various\Fast_IO.cpp
int f[kN], p[kN], x[kN], y[kN], sa[kN], sb[kN], idx[kN];
double ans, srp[kN], val[kN];
double Cal(int n) {
ll sd = ABS(sa[n] - sb[n]);
return val[n] = sd * sd / srp[n];
}
int Find(int n) {return n == f[n] ? n : f[n] = Find(f[n]);}
void Merge(int l, int r) {
l = Find(l), r = Find(r);
if (l != r) {
if (idx[l] < idx[r]) swap(l, r);
ans -= val[l];
ans -= val[r];
f[r] = l;
sa[l] += sa[r];
sb[l] += sb[r];
srp[l] += srp[r];
ans += Cal(l);
}
return ;
}
int main() {
//ios::sync_with_stdio(false);
//cin.tie(0);
//freopen("file_name", "r", stdin);
//freopen("file_name", "w", stdout);
//fstream input, output;
//input.open("file_name", ios::in);
//output.open("file_name", ios::out);
int n, q;
mt19937 rng;
Read_P(n);
for (int i = 1; i <= n; i++) Read_P(sa[i]);
for (int i = 1; i <= n; i++) Read_P(sb[i]);
for (int i = 1; i <= n; i++) Read_P(p[i]);
Read_P(q);
for (int i = 1; i <= q; i++) Read_P(x[i], y[i]);
for (int i = 1; i <= n; i++) idx[i] = rng();
for (int i = 1; i <= n; i++) assert(p[i]);
for (int i = 1; i <= n; i++) srp[i] = 1.0 / p[i];
for (int i = 1; i <= n; i++) f[i] = i;
for (int i = 1; i <= n; i++) ans += Cal(i);
for (int i = 1; i <= q; i++) {
Merge(x[i], y[i]);
printf("%.20lf\n", ans);
}
//input.close();
//output.close();
}
// End of B.cpp