結果

問題 No.1917 LCMST
ユーザー Trí Tâm Nguyễn
提出日時 2024-03-12 23:40:52
言語 C++14
(gcc 13.3.0 + boost 1.87.0)
結果
WA  
実行時間 -
コード長 1,916 bytes
コンパイル時間 1,557 ms
コンパイル使用メモリ 174,092 KB
実行使用メモリ 42,708 KB
最終ジャッジ日時 2024-09-29 22:29:24
合計ジャッジ時間 9,685 ms
ジャッジサーバーID
(参考情報)
judge1 / judge4
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 9 WA * 33
権限があれば一括ダウンロードができます
コンパイルメッセージ
main.cpp: In function 'void solve()':
main.cpp:77:15: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17' [-Wc++17-extensions]
   77 |     for (auto [w, u, v] : total)
      |               ^

ソースコード

diff #

//Make CSP great again
//Vengeance
#include <bits/stdc++.h>
#define TASK "TESTCODE"
using namespace std;
const int N = 1e6, M = 1e5;
int lab[N + 1];
int last[M + 1];

int FindSet(int u)
{
    return lab[u] < 0 ? u : lab[u] = FindSet(lab[u]);
}
bool unite(int u, int v)
{
    u = FindSet(u);
    v = FindSet(v);
    if (u == v)
    {
        return false;
    }
    if (lab[u] > lab[v])
    {
        swap(u, v);
    }
    lab[u] += lab[v];
    lab[v] = u;
    return true;
}
int rep[M + 1];
int n;
long long res = 0;
void read()
{
    cin >> n;
    for (int i = 1; i <= n; ++ i)
    {
        int a;
        cin >> a;
        lab[i] = -1;
        if (rep[a])
        {   
            res += a;
            unite(rep[a], i);
        }
        rep[a] = i;
    }
}
void solve()
{   
    vector<tuple<long long, int, int> > total;
    for (int i = 1; i <= M; ++ i)
    {   
        for (int j = i; j <= M; j += i)
        {
            if (rep[j])
            {
                last[i] = j;
                break;
            }
        }
    }
    for (int i = 1; i <= M; ++ i)
    {   
        if (!last[i])
        {
            continue;
        }
        for (int j = i; j <= M; j += i)
        {
            if (rep[j])
            {
                total.emplace_back(1LL * last[i] * j/__gcd(last[i], j), last[i], j);
            }
        }
    }
    for (auto [w, u, v] : total)
    {   
        res += 1LL * w * unite(rep[u], rep[v]);
    }
    assert(lab[FindSet(1)] == -n);
    cout << res;
}
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    if (fopen(TASK".INP", "r"))
    {
        freopen(TASK".INP", "r", stdin);
        //freopen(TASK".OUT", "w", stdout);
    }
    int t = 1;
    bool typetest = false;
    if (typetest)
    {
        cin >> t;
    }
    for (int __ = 1; __ <= t; ++ __)
    {
        //cout << "Case " << __ << ": ";
        read();
        solve();
    }
}
0