結果

問題 No.3270 No Coprime Cycles
ユーザー 沙耶花
提出日時 2025-09-12 22:05:58
言語 C++17
(gcc 13.3.0 + boost 1.87.0)
結果
WA  
実行時間 -
コード長 1,140 bytes
コンパイル時間 4,557 ms
コンパイル使用メモリ 262,572 KB
実行使用メモリ 90,948 KB
最終ジャッジ日時 2025-09-12 23:39:16
合計ジャッジ時間 21,377 ms
ジャッジサーバーID
(参考情報)
judge1 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 2
other AC * 14 WA * 28
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <stdio.h>
#include <atcoder/all>
#include <bits/stdc++.h>
using namespace std;
using namespace atcoder;
using mint = modint998244353;
#define rep(i,n) for (int i = 0; i < (n); ++i)
#define Inf32 1000000005
#define Inf64 1000000000000000001LL

int main(){
	int n;
	cin>>n;
	vector<int> ys(1000001);
	vector<int> ps;
	for(int i=2;i<ys.size();i++){
		if(ys[i]==0){
			for(int j=i;j<ys.size();j+=i){
				if(ys[j]==0)ys[j] = i;
			}
			ps.push_back(i);
		}
	}
	
	vector<vector<int>> es;
	rep(i,n){
		int a;
		cin>>a;
		vector<pair<int,int>> pp;
		while(a!=1){
			int p = ys[a];
			if(pp.size()>0 && pp.back().first==p){
				pp.back().second++;
			}
			else{
				pp.push_back({p,1});
			}
			a /= p;
		}
		rep(j,pp.size()){
			int d = distance(ps.begin(),lower_bound(ps.begin(),ps.end(),pp[j].first));
			int cost = 1;
			rep(k,pp[j].second){
				cost *= pp[j].first;
			}
			es.push_back({cost,n+d,i});
		}
	}
	long long ans = 0;
	sort(es.rbegin(),es.rend());
	dsu D(n+ps.size());
	rep(i,es.size()){
		int u = es[i][1],v = es[i][2];
		ans += es[i][0];
		if(D.same(u,v))continue;
		ans -= es[i][0];
		D.merge(u,v);
	}
	cout<<ans<<endl;
}
0