General
 
 
# Author Problem Lang Verdict Time Memory Sent Judged  
188411409 Practice:
DaiRuiChen007
1513D - 60 C++14 (GCC 6-32) Accepted 109 ms 9772 KB 2023-01-08 13:55:59 2023-01-08 13:55:59
→ Source
// LUOGU_RID: 99052434
#include<bits/stdc++.h>
#define int long long
#define pii pair<int,int>
using namespace std;
const int MAXN=2e5+1;
int dsu[MAXN],a[MAXN];
inline int find(int x) {
	if(dsu[x]==x) return x;
	return dsu[x]=find(dsu[x]);
}
inline void solve() {
	int n,p,tot=0,ans=0;
	scanf("%lld%lld",&n,&p);
	for(int i=1;i<=n;++i) dsu[i]=i;
	priority_queue <pii,vector<pii>,greater<pii> > q;
	for(int i=1;i<=n;++i) {
		scanf("%lld",&a[i]);
		if(a[i]<p) q.push(make_pair(a[i],i));
	}
	while(!q.empty()) {
		int x=q.top().second; q.pop();
		for(int i=x-1;i>=1;--i) {
			if(a[i]%a[x]!=0) break;
			int u=find(x),v=find(i);
			if(u!=v) {
				++tot,ans+=a[x];
				dsu[u]=v;
			} else break;
		}
		for(int i=x+1;i<=n;++i) {
			if(a[i]%a[x]!=0) break;
			int u=find(x),v=find(i);
			if(u!=v) {
				++tot,ans+=a[x];
				dsu[u]=v;
			} else break;
		}
	}
	printf("%lld\n",ans+(n-1-tot)*p);
}
signed main() {
	int T;
	scanf("%lld",&T);
	while(T--) solve();
	return 0;
}
?
Time: ? ms, memory: ? KB
Verdict: ?
Input
?
Participant's output
?
Jury's answer
?
Checker comment
?
Diagnostics
?
Click to see test details