#include<bits/stdc++.h>
///...................................*****.................................................///
/// Author : Raihan Khan Raka ( raihankhanraka@gmail.com ) ///
/// Department of Computer Science ///
/// & Engineering ///
/// Comilla University , Bangladesh. ///
///...................................*****.................................................///
/*....................................Values................................................*/
#define p5 100007
#define p6 1000007
#define PI acos(-1)
#define M 1000000007
#define inf 1LL << 62
#define white 0
#define gray 1
#define black 2
/*....................................Functions.............................................*/
#define sqr(x) x*x
#define sc scanf
#define pf printf
#define pfn printf("\n")
#define scin(x) sc("%d",&(x))
#define scin2(xx,zz) scanf("%d %d",&xx,&zz)
#define scln(x) sc("%lld",&(x))
#define scln2(xx,zz) scanf("%lld %lld",&xx,&zz)
#define min3(a,b,c) min(a,b<c?b:c)
#define max3(a,b,c) max(a,b>c?b:c)
#define all(v) v.begin(), v.end()
#define ok cout << "ok" << endl
#define mem(x,y) memset(x,y,sizeof(x))
#define clr(a) a.clear()
#define READ(f) freopen(f, "r", stdin)
#define WRITE(f) freopen(f, "w", stdout)
/*...................................Data_Types............................................*/
#define lli long long int
#define ull unsigned long long int
#define pii pair < int, int>
#define pll pair < ll, ll>
#define veci vector<int>
#define vecl vector<long long int>
#define vecp vector< pair<int,int> >
#define mapstrint map< string , int >
#define mapstrstr map< string , string >
#define mapint map< int, int >
#define uset unordered_set
#define umap unordered_map
#define pq priority_queue
#define pb push_back
#define mp make_pair
#define ff first
#define ss second
/*.....................................Loops...............................................*/
#define rep( i , a , b ) for( i=a ; i<b ; i++)
#define rev( i , a , b ) for( i=a ; i>=b ; i--)
#define repx( i ,a,b, x) for( i=a ; i<b ; i+=x)
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
//int month[]={31,28,31,30,31,30,31,31,30,31,30,31};
///------------------------------- Mudular functions----------------------------------------
/*
inline lli power(lli x, lli y){ lli temp; if( y == 0) return 1; temp = power(x, y/2); if (y%2 == 0) return temp*temp; else return x*temp*temp; }
inline lli add(lli a, lli b) {a += b; return a >= M ? a - M : a;}
inline lli sub(lli a, lli b) {a -= b; return a < 0 ? a + M : a;}
inline lli mul(lli a, lli b) {return (a * b) % M;}
lli gcd(lli x,lli y)
{
if(x==0) return y;
return gcd(y%x,x);
}
lli bigmod(lli n, lli k )
{
lli ans=1;
while(k)
{
if(k&1)
ans=(ans*n)%M;
k=k>>1;
n=(n*n)%M;
}
return ans;
}
*/
///----------------------------------Graph moves----------------------------------------
/*
int dx4[5] = {1, -1, 0, 0};
int dy4[5] = {0, 0, 1, -1};
int dx8[9] = {0, 0, 1, -1, -1, 1, -1, 1};
int dy8[9] = {-1, 1, 0, 0, 1, 1, -1, -1};
int knightx[9] = {-2, -2, -1, -1, 1, 1, 2, 2};
int knighty[9] = {-1, 1, -2, 2, -2, 2, -1, 1};
bool valid( int r , int c , int x , int y ){ if( x >= 1 && x <= r && y >= 1 && y <= c ) return 1 ; return 0 ; }
*/
using namespace std;
/// Complexity ElogV
class data
{
public:
int u,v,w;
};
data g[p5];
int par[p5],rnk[p5];
inline bool cmp(const data &a,const data &b)
{
return a.w<b.w;
}
int find_par(int u)
{
return par[u]=(par[u]==u)?u:find_par(par[u]);
}
int main()
{
int n,m; // number of nodes and number of edges
int i,j,k,p,a,b,mstcost=0;
scin2(n,m);
rep(i , 0 , m)
{
sc("%d %d %d",&g[i].u,&g[i].v,&g[i].w );
}
sort(g,g+m,cmp); // sorting the edges according to their increasing weight
rep(i , 1 , n+1)
{
par[i]=i;
rnk[i]=0;
}
rep(i , 0 , m)
{
a=find_par(g[i].u);
b=find_par(g[i].v);
if(a!=b)
{
mstcost+=g[i].w;
if(rnk[a]>rnk[b])
{
par[b]=a;
}
else
{
par[a]=b;
if(rnk[a]==rnk[b]) rnk[b]++;
}
}
}
pf("%d\n",mstcost);
#ifdef HOME
cerr << "Time elapsed: " << clock() / 1000 << " ms" << endl;
#endif
return 0;
}
Comments
Post a Comment