Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- using tu = tuple<int ,int ,int> ;
- int parent[100010];
- bool visited[100010];
- int find(int u){
- if(parent[u]==u){
- return u;
- }
- return parent[u]=find(parent[u]);
- }
- void merge(int u,int v){
- u = find(u);
- v = find(v);
- if(u==v){
- return ;
- }
- if(u>v){
- parent[v]=u;
- }
- else{
- parent[u]=v;
- }
- }
- int main(){
- int n ,m ;
- scanf("%d%d",&n,&m);
- for(int i=1;i<=n;++i){
- parent[i]=i;
- }
- vector<tu> sp;
- int u ,v ,w;
- for(int i=1;i<=m;++i){
- scanf("%d%d%d",&u,&v,&w);
- sp.push_back(make_tuple(w,u,v));
- }
- sort(sp.begin(),sp.end());
- int low=0;
- int max1=-1;
- bool anothergraph=false;
- for(int c=0;c<m;++c){
- u = get<1>(sp[c]);
- v = get<2>(sp[c]);
- if(find(u)==find(v)){
- continue;
- }
- visited[c]=true;
- max1=get<0>(sp[c]);
- low+= get<0>(sp[c]);
- merge(u,v);
- }
- for(int i=0;i<m;++i){
- if(!visited[i]&&get<0>(sp[i])<=max1){
- anothergraph=true;
- break;
- }
- }
- cout << low << " ";
- if(anothergraph){
- cout << "1";
- }
- else{
- cout << "0";
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement