Submission #6306780


Source Code Expand

#include<bits/stdc++.h>
#define ll long long
#define ljc 998244353
#define int long long
using namespace std;
/* 
对kruskal算法的彻底理解。

A_i,B_i连接了C_i。

所以A_{i+1},B_i连接了C_i +1 等价于和这个连通块连接了C_i +1的边
(C_i<C_i +1) 所以此刻如果要连接这条边,A_i,B_i已经连接上了(必然)

所以等价于A_i A_{i+1} 连接了C_i +1,B_i B_{i+1} 连接了 C_i +2

设D数组表示 i 向后每一个点扩展连边,最小值为多少。
前缀最小值即可。做两遍。
D[i]=min(D[i],D[(i-1+n)%n]+2); 
D[i]=min(D[i],D[(i-1+n)%n]+2); 
*/
#ifdef Fading
#define gc getchar
#endif
#ifndef Fading
inline char gc(){
    static char now[1<<16],*S,*T;
    if (T==S){T=(S=now)+fread(now,1,1<<16,stdin);if (T==S) return EOF;}
    return *S++;
}
#endif
inline ll read(){
    register ll x=0,f=1;char ch=gc();
    while (!isdigit(ch)){if(ch=='-')f=-1;ch=gc();}
    while (isdigit(ch)){x=(x<<3)+(x<<1)+ch-'0';ch=gc();}
    return (f==1)?x:-x;
}
struct edge{
	int from,to,dis;
}g[10000001];
int F[2200001],tot,n,m;
int find(int u){
	if (F[u]!=u) F[u]=find(F[u]);
	return F[u];
}
inline void made(int a,int b,int c){
	g[++tot].from=a;g[tot].to=b;g[tot].dis=c;
}
inline bool cmp(edge a,edge b){
	return a.dis<b.dis;
}
int D[1000001];
signed main(){
	n=read();m=read();
	memset(D,0x3f,sizeof D);
	for (int i=1;i<=m;i++){
		int a=read(),b=read(),c=read();
		made(a,b,c);
		D[a]=min(D[a],c+1);
		D[b]=min(D[b],c+2);
	}
	for (int i=0;i<n;i++) F[i]=i;
	for (int i=0;i<n;i++) D[i]=min(D[i],D[(i-1+n)%n]+2);
	for (int i=0;i<n;i++) D[i]=min(D[i],D[(i-1+n)%n]+2);
	for (int i=0;i<n;i++){
		made(i,(i+1)%n,D[i]);
	}
	sort(g+1,g+1+tot,cmp);
	int ans=0;
	for (int i=1;i<=tot;i++){
		int u=g[i].from,v=g[i].to;
		int uu=find(u),vv=find(v);
		if (F[uu]!=vv){
			F[uu]=vv;ans+=g[i].dis;
		}
	}
	cout<<ans;
    return 0;
}

Submission Info

Submission Time
Task G - Zigzag MST
User luogu_bot2
Language C++14 (GCC 5.4.1)
Score 1300
Code Size 1932 Byte
Status AC
Exec Time 104 ms
Memory 23936 KB

Judge Result

Set Name sample all
Score / Max Score 0 / 0 1300 / 1300
Status
AC × 3
AC × 36
Set Name Test Cases
sample sample-01.txt, sample-02.txt, sample-03.txt
all sample-01.txt, sample-02.txt, sample-03.txt, 01-01.txt, 01-02.txt, 01-03.txt, 01-04.txt, 01-05.txt, 01-06.txt, 01-07.txt, 01-08.txt, 01-09.txt, 01-10.txt, 01-11.txt, 01-12.txt, 01-13.txt, 01-14.txt, 01-15.txt, 01-16.txt, 01-17.txt, 01-18.txt, 01-19.txt, 01-20.txt, 01-21.txt, 01-22.txt, 01-23.txt, 01-24.txt, 01-25.txt, 01-26.txt, 01-27.txt, 01-28.txt, 01-29.txt, 01-30.txt, sample-01.txt, sample-02.txt, sample-03.txt
Case Name Status Exec Time Memory
01-01.txt AC 4 ms 10496 KB
01-02.txt AC 39 ms 14592 KB
01-03.txt AC 81 ms 20992 KB
01-04.txt AC 50 ms 18944 KB
01-05.txt AC 35 ms 17664 KB
01-06.txt AC 42 ms 18176 KB
01-07.txt AC 36 ms 17024 KB
01-08.txt AC 35 ms 16768 KB
01-09.txt AC 38 ms 16768 KB
01-10.txt AC 57 ms 18688 KB
01-11.txt AC 61 ms 18688 KB
01-12.txt AC 78 ms 20736 KB
01-13.txt AC 79 ms 20736 KB
01-14.txt AC 79 ms 20736 KB
01-15.txt AC 81 ms 20736 KB
01-16.txt AC 78 ms 20864 KB
01-17.txt AC 79 ms 20736 KB
01-18.txt AC 57 ms 23936 KB
01-19.txt AC 36 ms 16896 KB
01-20.txt AC 35 ms 16640 KB
01-21.txt AC 48 ms 18688 KB
01-22.txt AC 66 ms 20736 KB
01-23.txt AC 67 ms 20736 KB
01-24.txt AC 33 ms 19840 KB
01-25.txt AC 104 ms 23936 KB
01-26.txt AC 49 ms 19200 KB
01-27.txt AC 42 ms 18176 KB
01-28.txt AC 58 ms 20224 KB
01-29.txt AC 57 ms 19584 KB
01-30.txt AC 74 ms 22272 KB
sample-01.txt AC 4 ms 10496 KB
sample-02.txt AC 4 ms 10496 KB
sample-03.txt AC 4 ms 10496 KB