#include <stdio.h>
#include <vector>
#include <algorithm>
using namespace std;
int par[200000];
int fnd(int k)
{
return par[k]==k?k:par[k]=fnd(par[k]);
}
int w[200000];
bool cmp(const pair<pair<int,int>,int> &a,const pair<pair<int,int>,int> &b)
{
return a.second<b.second;
}
int main()
{
int n,q;
scanf("%d%d",&n,&q);
vector<pair<pair<int,int>,int> > cross;
for (int i=0;i<n;++i)
w[i]=2000000000;
for (int i=0;i<q;++i)
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
cross.push_back(make_pair(make_pair(a,b),c));
if (c+1<w[a])
w[a]=c+1;
if (c+2<w[b])
w[b]=c+2;
}
for (int i=0;i<n;++i)
w[(i+1)%n]=min(w[(i+1)%n],w[i]+2);
for (int i=0;i<n;++i)
w[(i+1)%n]=min(w[(i+1)%n],w[i]+2);
for (int i=0;i<n;++i)
cross.push_back(make_pair(make_pair(i,(i+1)%n),w[i]));
sort(cross.begin(),cross.end(),cmp);
for (int i=0;i<n;++i)
par[i]=i;
long long ans=0;
for (auto &c:cross)
{
int u=c.first.first,v=c.first.second;
if (fnd(u)!=fnd(v))
{
par[fnd(u)]=fnd(v);
ans+=c.second;
}
}
printf("%lld\n",ans);
return 0;
}
./Main.cpp: In function ‘int main()’:
./Main.cpp:18:24: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%d%d",&n,&q);
^
./Main.cpp:25:33: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%d%d%d",&a,&b,&c);
^