Submission #1154903

#TimeUsernameProblemLanguageResultExecution timeMemory
1154903giaminh2211Sirni (COCI17_sirni)C++20
84 / 140
2239 ms851968 KiB
#include <bits/stdc++.h>

using namespace std;
using ll=long long;

const int N=1e6+13;

struct E{
	int x, y;
	ll val;

	bool operator < (const E& o){
        return val < o.val;
	}
};

struct DSU{
	int par[N];
	
	void init(int _sz){
		for(int i=0; i<=_sz; i++){
			par[i]=i;
		}
	}

	int f(int v){
		if(par[v]==v) return v;
		par[v]=f(par[v]);
		return par[v];
	}

	void uni(int u, int v){
		int Ru=f(u);
		int Rv=f(v);
		if(Ru!=Rv) par[Ru]=Rv;
	}
} dsu;

ll res=0;
int n;
ll a[N];
ll ans[N];
ll mx;
vector<E> sus;

void scan(){
    cin >> n;
    dsu.init(n+3);
    for(int i=1; i<=n; i++){
        cin >> a[i];
    }
    sort(a+1, a+n+1);
    n=unique(a+1, a+n+1)-a-1;
    mx=a[n];
    //for(int i=1; i<=n; i++){
    //	cout << a[i] << ' ';
    //}
    //cout << '\n';
}

void solve(){
	fill(ans+2, ans+n+1, 1e18);
    for(int i=1; i<n; i++){
        for(int j=a[i]; j<=mx; j+=a[i]){
            int p=lower_bound(a+1, a+n+1, j)-a;
            if(j==a[i]) p=lower_bound(a+1, a+n+1, j+1)-a;
            if(1<=p && p<=n){
            	sus.push_back({i, p, min(a[i]%a[p], a[p]%a[i])});
            	//cerr << i << ' ' << p << ' ' << a[p]%a[i] << '\n';
            }
        }
    }
    sort(begin(sus), end(sus));
    for(auto c: sus){
    	if(dsu.f(c.x)!=dsu.f(c.y)){
    		res += c.val;
    		dsu.uni(c.x, c.y);
    	}
    }
    cout << res;
}

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    scan();
    solve();
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...