#include #include #include #include using namespace std; typedef pair ii; //UFDS vector ranks(1000), parents(1000); void create(int n){ for(int i=0;iranks[j]) parents[j]=i; else parents[i]=j; } int main() { //Assume it's a tree instead of a forest, stupid solution, taking the E-1 keys with greatest probability int m,n; cin>>m>>n; vector > probabilities(m); priority_queue > q; for(int i=0; i(n); for (int j=0; j> probabilities[i][j]; } int num = -1; for(int i=0; i> len; if (num == -1) num = len; if (len != 0) num++; for(int k=0; k> col; q.push(make_pair(probabilities[i][col],ii(-i,-col-m))); } } num-=1; create(m+n); vector sol; while(!q.empty() && num--) { ii edge=q.top().second; q.pop(); edge.first=-edge.first; edge.second=-edge.second; sol.push_back(ii(edge.first, edge.second-m)); } sort(sol.begin(), sol.end()); for(int i=0; i