#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() { 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]; } for(int i=0; i> len; for(int k=0; k> col; q.push(make_pair(probabilities[i][col],ii(-i,-m-col))); } } create(m+n); vector sol; while(!q.empty()) { ii edge=q.top().second; q.pop(); edge.first=-edge.first; edge.second=-edge.second; if(find(edge.first)!= find(edge.second)) { sol.push_back(ii(edge.first, edge.second-m)); unionn(edge.first, edge.second); } } sort(sol.begin(), sol.end()); for(int i=0; i