Submission #7952817


Source Code Expand

#include <iostream>
#include <vector>
#include <utility>
#include <algorithm>
#define llint long long
#define inf 1e18

using namespace std;
typedef pair<llint, llint> P;
typedef pair<llint, P> E;

struct SegTree{
	int size;
	vector<llint> seg;
	
	SegTree(){}
	SegTree(int size){
		this->size = size;
		seg.resize(1<<(size+1));
	}
	
	void init()
	{
		for(int i = 0; i < (1<<(size+1)); i++) seg[i] = inf;
	}
	
	void update(int i, llint val)
	{
		i += (1 << size);
		seg[i] = val;
		while(i > 1){
			i /= 2;
			seg[i] = min(seg[i*2], seg[i*2+1]);
		}
	}

	llint query(int a, int b, int k, int l, int r)
	{
		if(b < l || r < a) return inf;
		if(a <= l && r <= b) return seg[k];
		llint lval = query(a, b, k*2, l, (l+r)/2);
		llint rval = query(a, b, k*2+1, (l+r)/2+1, r);
		return min(lval, rval);
	}
	llint query(int a, int b)
	{
		return query(a, b, 1, 0, (1<<size)-1);
	}
};

struct UnionFind{
	int size;
	vector<int> parent;
	
	UnionFind(){}
	UnionFind(int size){
		this->size = size;
		parent.resize(size+1);
		init();
	}
	void init(){
		for(int i = 0; i <= size; i++) parent[i] = i;
	}
	int root(int i){
		if(parent[i] == i) return i;
		return parent[i] = root(parent[i]);
	}
	bool same(int i, int j){
		return root(i) == root(j);
	}
	void unite(int i, int j){
		int root_i = root(i), root_j = root(j);
		if(root_i == root_j) return;
		parent[root_i] = root_j;
	}
};

llint n, Q;
llint a[200005], b[200005], c[200005];
vector<E> vec;
SegTree seg(19);
UnionFind uf(200005);

int main(void)
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	
	cin >> n >> Q;
	for(int i = 1; i <= Q; i++) cin >> a[i] >> b[i] >> c[i];
	
	seg.init();
	for(int i = 1; i <= Q; i++){
		llint u = a[i], v = b[i], w = c[i];
		if(u > v) v += n;
		
		llint val = seg.query(u, u); 
		seg.update(u, min(val, w-2*(u-1)-1));
		u += n;
		val = seg.query(u, u); 
		seg.update(u, min(val, w-2*(u-1)-1));
		
		val = seg.query(v, v); 
		seg.update(v, min(val, w-2*(v-1)));
		v += n;
		if(v < 2*n){
			val = seg.query(v, v); 
			seg.update(v, min(val, w-2*(v-1)));
		}
	}
	
	for(int i = 1; i <= Q; i++) vec.push_back(make_pair(c[i], make_pair(a[i], b[i])));
	for(int i = 0; i < n; i++){
		llint mn = seg.query(0, i) + 2*i;
		mn = min(mn, seg.query(0, n+i) + 2*(n+i));
		vec.push_back(make_pair(mn, make_pair(i, (i+1)%n)));
	}
	sort(vec.begin(), vec.end());
	
	llint ans = 0;
	for(int i = 0; i < vec.size(); i++){
		llint w = vec[i].first, u = vec[i].second.first, v = vec[i].second.second;
		if(uf.same(u, v)) continue;
		ans += w;
		uf.unite(u, v);
	}
	cout << ans << endl;
	
	return 0;
}

Submission Info

Submission Time
Task G - Zigzag MST
User leaf1415
Language C++14 (GCC 5.4.1)
Score 1300
Code Size 2674 Byte
Status AC
Exec Time 308 ms
Memory 28396 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 5 ms 11264 KB
01-02.txt AC 188 ms 21104 KB
01-03.txt AC 299 ms 27500 KB
01-04.txt AC 73 ms 18284 KB
01-05.txt AC 64 ms 18032 KB
01-06.txt AC 67 ms 18928 KB
01-07.txt AC 68 ms 18032 KB
01-08.txt AC 71 ms 18672 KB
01-09.txt AC 85 ms 19696 KB
01-10.txt AC 193 ms 26348 KB
01-11.txt AC 264 ms 28396 KB
01-12.txt AC 305 ms 26476 KB
01-13.txt AC 304 ms 28268 KB
01-14.txt AC 304 ms 26476 KB
01-15.txt AC 306 ms 26860 KB
01-16.txt AC 304 ms 27116 KB
01-17.txt AC 304 ms 28396 KB
01-18.txt AC 222 ms 26604 KB
01-19.txt AC 66 ms 19312 KB
01-20.txt AC 81 ms 18928 KB
01-21.txt AC 148 ms 18928 KB
01-22.txt AC 308 ms 27756 KB
01-23.txt AC 304 ms 26476 KB
01-24.txt AC 73 ms 19564 KB
01-25.txt AC 270 ms 27244 KB
01-26.txt AC 74 ms 19052 KB
01-27.txt AC 87 ms 17904 KB
01-28.txt AC 215 ms 26860 KB
01-29.txt AC 267 ms 27628 KB
01-30.txt AC 303 ms 28012 KB
sample-01.txt AC 5 ms 11264 KB
sample-02.txt AC 5 ms 11264 KB
sample-03.txt AC 5 ms 11264 KB