AtCoder Beginner Contest 210
E - Ring MST
题目描述:
思路:
#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
#define inf 0x3f3f3f3f
#define mod7 1000000007
#define mod9 998244353
#define m_p(a,b) make_pair(a, b)
#define mem(a,b) memset((a),(b),sizeof(a))
#define io ios::sync_with_stdio(false); cin.tie(0); cout.tie(0)
#define debug(a) cout << "Debuging...|" << #a << ": " << a << "\n";
typedef long long ll;
#define int long long
typedef pair <int,int> pii;
#define MAX 300000 + 50
int n, m, k, x;
struct ran{
int a, c;
bool operator < (const ran &x)const{
return c < x.c;
}
}tr[MAX];
int gcd(int a, int b){
if(!b)return a;
else return gcd(b, a % b);
}
void work(){
cin >> n >> m;
for(int i = 1; i <= m; ++i)cin >> tr[i].a >> tr[i].c;
sort(tr + 1, tr + 1 + m);
ll ans = 0;
int sum = n;
int gg = n;
for(int i = 1; i <= m; ++i){
gg = gcd(gg, tr[i].a);
ans += (sum - gg) * tr[i].c;
sum = gg;
if(gg == 1)break;
}
if(gg == 1)cout << ans << endl;
else cout << -1 << endl;
}
signed main(){
io;
work();
return 0;
}