Advertisement
SuitNdtie

MBST postposn

Mar 28th, 2019
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.34 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<vector>
  3. #include<queue>
  4. using namespace std;
  5.  
  6. struct edge{
  7.     int u,v,w;
  8.     bool operator<(const edge &rhs)const{
  9.         return w > rhs.w;
  10.     }
  11. };
  12. int set[1010];
  13. int find(int x){
  14.     if(set[x] == x)return x;
  15.     return set[x] = find(set[x]);
  16. }
  17. bool isset(int x,int y){
  18.     return find(x) == find(y);
  19. }
  20. void unions(int x,int y){
  21.     int rx = find(x);
  22.     int ry = find(y);
  23.     set[rx] = ry;
  24. }
  25. int max(int a,int b){
  26.     return (a > b ? a : b);
  27. }
  28.  
  29. int main(){
  30.     for(int i=0;i<=1000;i++)set[i] = i;
  31.     int n,m;
  32.     scanf("%d %d",&n,&m);
  33.    
  34.     vector<pair<int,int> > adj[n+1];
  35.     priority_queue<edge> pq;
  36.     for(int i=0;i<m;i++){
  37.         int u,v,w;
  38.         scanf("%d %d %d",&u,&v,&w);
  39.         adj[u].push_back({w,v});
  40.         adj[v].push_back({w,u});
  41.         pq.push({u,v,w});
  42.     }
  43.     int MST = 0;
  44.     int maxw = 0;
  45.     while(!pq.empty()){
  46.         edge e = pq.top();
  47.         pq.pop();
  48.         if(isset(e.u,e.v))continue;
  49.         MST += e.w;
  50.         unions(e.u,e.v);
  51.         maxw = max(maxw,e.w);
  52.     }
  53.     int MBST = 0;
  54.     queue<int> q;
  55.     q.push(1);
  56.     bool visited[n+1];for(int i=0;i<=n;i++)visited[i] = false;
  57.     while(!q.empty()){
  58.         int u = q.front();
  59.         q.pop();
  60.         if(visited[u]){
  61.             MBST = 1;
  62.             break;
  63.         }
  64.         visited[u] = true;
  65.         for(int i=0;i<adj[u].size();i++){
  66.             int v = adj[u][i].second;
  67.             int w = adj[u][i].first;
  68.             if(!visited[v] && w <= maxw){
  69.                 q.push(v);
  70.             }
  71.         }
  72.     }
  73.    
  74.     printf("%d %d",MST,MBST);
  75. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement