#include<algorithm>
#include<cstdio>
#include<cstring>
#define N 500000
#define NN 200005
using namespace std;
struct ahh{
int u,v,next;
long long w;
}a[N];
int fa[NN],head[NN],n,m,tot,x,y;
long long sum,best[NN],v;
void add(int u,int v,long long w){
tot++;
a[tot].u=u;a[tot].v=v;a[tot].w=w;
}
bool cmp(ahh x,ahh y){return (x.w<y.w);}
int find(int x){
if (fa[x]!=x)fa[x]=find(fa[x]);
return fa[x];
}
void Union(int x,int y){
int x1=find(x);
int y1=find(y);
if (x1!=y1)fa[y1]=x1;
}
void kruskal(){
for (int i=0;i<n;i++)fa[i]=i;
sort(a+1,a+tot+1,cmp);
for (int i=1;i<=tot;i++)
if (find(a[i].u)!=find(a[i].v))Union(a[i].u,a[i].v),sum+=a[i].w;
}
int main(){
// freopen("L.in","r",stdin);
tot=0;
sum=0;
memset(best,127,sizeof(best));
scanf("%d%d",&n,&m);
for (int i=1;i<=m;i++){
scanf("%d%d%lld",&x,&y,&v);
add(x,y,v);
best[x%n]=min(best[x%n],v+1);
best[y%n]=min(best[y%n],v+2);
}
for (int t=0;t<2;t++)
for (int i=0;i<n;i++)
best[(i+1)%n]=min(best[(i+1)%n],best[i]+2);
for (int i=0;i<n;i++){
add(i,(i+1)%n,best[i]);
}
kruskal();
printf("%lld",sum);
}
./Main.cpp: In function ‘int main()’:
./Main.cpp:38:21: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%d%d",&n,&m);
^
./Main.cpp:40:29: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%d%d%lld",&x,&y,&v);
^