Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define be(v) (v).begin(), (v).end()
- #define sz(v) v.size()
- #define pb push_back
- #define mk make_pair
- #define oo 100010
- #define s second
- #define f first
- int p,r,a,b,c,visi[1000],pai[100];
- vector<pair<int,pair<int,int> > > vv;
- vector<vector<int> > g;
- void dfs(int u){
- visi[u] = 1;
- for(int k=0;k<g[u].size();k++){
- if(visi[g[u][k]] == 0){
- visi[g[u][k]] = 1;
- dfs(g[u][k]);
- }
- }
- }
- int find(int u){
- return pai[u] == u ? u:pai[u] = find(pai[u]);
- }
- int kruskal(){
- int fa,fb,soma = 0;
- sort(vv.begin(),vv.end());
- for(int i=0;i<vv.size();i++){
- fa = find(vv[i].s.f);
- fb = find(vv[i].s.s);
- if(fa != fb){
- pai[fb] = fa;
- soma += vv[i].f;
- }
- }
- return soma;
- }
- int main() {
- while(cin >> p >> r){
- vv.clear();
- g.assign(p+10,vector<int>());
- memset(visi,0,sizeof visi);
- for(int k=1;k<p+1;k++) pai[k] = k;
- for(int k=0;k<r;k++){
- cin >> a >> b >> c;
- vv.pb(mk(c,mk(a,b)));
- g[a].pb(b);
- g[b].pb(a);
- }
- int cont = 0;
- for(int k=1;k<p+1;k++){
- if(visi[k] == 0){
- dfs(k);
- cont++;
- }
- }
- if(cont == 1) cout << kruskal() << endl;
- else cout << "impossivel\n";
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement