Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #pragma GCC target( "sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
- #pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math,O3")
- #include <bits/stdc++.h>
- using namespace std;
- #define speed ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
- #define pb push_back
- #define mp make_pair
- #define F first
- #define S second
- #define sz(x) (int)(x.size())
- #define all(x) x.begin(), x.end()
- typedef long long ll;
- typedef unsigned long long ull;
- const ll INF = LLONG_MAX;
- const int inf = INT_MAX;
- const int N = 3e5+5;
- const int MOD = 1e9+7;
- const double EPS = 1e-9;
- vector <vector <pair <ll, ll> > > g(N);
- vector <ll> mins(N, INF);
- bool used[N];
- void solve(){
- ll n, m, u, v, w, st = -1, ans = 0;
- set <ll> se;
- vector <ll> vert;
- cin >> n >> m;
- while(m--){
- cin >> u >> v >> w;
- g[u].pb({v, w});
- g[v].pb({u, w});
- if(st == -1)
- st = u;
- mins[u] = min(mins[u], w);
- mins[v] = min(mins[v], w);
- se.insert(u);
- se.insert(v);
- }
- vert.insert(vert.begin(), all(se));
- mins[st] = 0;
- for(int i = 0; i < n; i++){
- ll v = -1;
- for(int j = 0; j < n; j++)
- if(!used[vert[j]] && (v == -1 || mins[vert[j]] < mins[v]))
- v = vert[j];
- used[v] = 1;
- for(auto x : g[v]){
- ll to = x.F, len = x.S;
- if(len < mins[to])
- mins[to] = len;
- }
- }
- for(int i = 0; i < n; i++)
- ans += mins[vert[i]];
- cout << ans << '\n';
- }
- int main(){
- speed;
- int T = 1;
- while(T--)
- solve();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement