Problem: Example

Input

4 4
1 2 3
1 3 3
2 3 3
2 4 3


Output

1 3

Solution (in CPP):

Solution:
#include <bits/stdc++.h>
using namespace std;

using VI = vector<int>;
using VVI = vector<VI>;
using PII = pair<int, int>;
using LL = long long;
using VL = vector<LL>;
using VVL = vector<VL>;
using PLL = pair<LL, LL>;
using VS = vector<string>;

#define ALL(a)  begin((a)),end((a))
#define RALL(a) (a).rbegin(), (a).rend()
#define PB push_back
#define EB emplace_back
#define MP make_pair
#define SZ(a) int((a).size())
#define SORT(c) sort(ALL((c)))
#define RSORT(c) sort(RALL((c)))
#define UNIQ(c) (c).erase(unique(ALL((c))), end((c)))

#define FOR(i,a,b) for(int i=(a);i<(b);++i)
#define REP(i,n)  FOR(i,0,n)

#define FF first
#define SS second
template<class S, class T>
istream& operator>>(istream& is, pair<S,T>& p){
  return is >> p.FF >> p.SS;
}
template<class S, class T>
ostream& operator<<(ostream& os, const pair<S,T>& p){
  return os << p.FF << " " << p.SS;
}
template<class T>
void maxi(T& x, T y){
  if(x < y) x = y;
}
template<class T>
void mini(T& x, T y){
  if(x > y) x = y;
}


const double EPS = 1e-10;
const double PI  = acos(-1.0);
const LL MOD = 1e9+7;

int lowlink(int c, int u, int p, int& num, vector<vector<PII>>& G, VI& ord, VI& low){
  int res = 0;
  ord[u] = low[u] = num++;
  
  for(auto&& e: G[u]){
	int to = e.FF;
	if(to == p) continue;
	if(ord[to] < 0){
	  res += lowlink(c, to, u, num, G, ord, low);
	  low[u] = min(low[u], low[to]);
	  if(ord[u] < low[to] && c == e.SS)
		++res;
	}
	else{
	  low[u] = min(low[u], ord[to]);
	}
  }

  return res;
}

int main(){
  cin.tie(0);
  ios_base::sync_with_stdio(false);

  int N, M;
  cin >> N >> M;
  vector<vector<PII>> G(N);
  vector<vector<PII>> es(10001);
  REP(i,M){
	int u, v, c;
	cin >> u >> v >> c;
	--u;
	--v;
	es[c].EB(u, v);
  }

  int ans_num = 0, ans_sum = 0;
  for(int c=1;c<=10000;++c){
	for(auto&& e: es[c]){
	  G[e.FF].EB(e.SS, c);
	  G[e.SS].EB(e.FF, c);
	}
	int b = 0;
	
	VI ord(N,-1), low(N,-1);
	REP(i,N){
	  if(ord[i] >= 0) continue;
	  int n = 0;
	  b += lowlink(c, i, -1, n, G, ord, low);
	}
	ans_num += b;
	ans_sum += b * c;
  }
  cout << ans_num << " " << ans_sum << endl;

  return 0;
}