?
# | 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 |
// 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; }
?
?
?
?