Guest User

Untitled

a guest
Jan 6th, 2020
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.79 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. typedef  long long int ll;
  4. #define INF LLONG_MAX
  5.  
  6. vector<ll> dist(100005,INF);
  7. vector<bool> visited(100005,false);
  8. vector<bool> p(100005,false);
  9. ll n,m,a,b,c;
  10. vector<ll> adj[100005];
  11. vector<ll> g[100005];
  12.  
  13. void dfs(ll s , ll q){
  14.  
  15.     if(p[s] == true) return;
  16.     p[s] = true;
  17.     g[q].push_back(s);
  18.     for(auto u : adj[s]) dfs(u,q);
  19. }
  20.  
  21. void dijkstra(ll s){
  22.  
  23.     for(ll i = 0; i < n; i++){
  24.         dist[i] = INF;
  25.         visited[i] = false;
  26.     }
  27.  
  28.     priority_queue<pair<ll,ll>> q;
  29.  
  30.     dist[s] = 0;
  31.     q.push({0,s});
  32.  
  33.     while(!q.empty()){
  34.  
  35.         ll a = q.top().second;
  36.         q.pop();
  37.  
  38.         if(visited[a] == true) continue;
  39.         visited[a] = true;
  40.  
  41.         for(auto u : adj[a]){
  42.  
  43.             if(dist[a] + 1 < dist[u]){
  44.  
  45.                 dist[u] = dist[a]+1;
  46.                 q.push(make_pair(-dist[u],u));
  47.             }
  48.         }
  49.     }
  50. }
  51. int main() {
  52.  
  53.    cin >> n >> m;
  54.    vector<ll> outdegree(n+5);
  55.  
  56.     for(ll i = 0; i < m; i++){
  57.  
  58.        cin >> a >> b;
  59.        outdegree[a-1]++;
  60.        outdegree[b-1]++;
  61.        adj[a-1].push_back(b-1);
  62.        adj[b-1].push_back(a-1);
  63.    }
  64.  
  65.     ll total = -INF;
  66.  
  67.     ll c = 0;
  68.     for(ll i = 0; i < n; i++){
  69.  
  70.         if(p[i] == true) continue;
  71.         g[c].push_back(i);
  72.         dfs(i,c);
  73.         c++;
  74.     }
  75.  
  76.     for(ll y = 0; y < c; y++) {
  77.  
  78.         ll best = 0;
  79.         ll node;
  80.  
  81.         for(auto z : g[y]){
  82.  
  83.             if(outdegree[z] > best){
  84.                 node = z;
  85.                 best = outdegree[z];
  86.             }
  87.         }
  88.  
  89.         dijkstra(node);
  90.  
  91.         for (ll i = 0; i < n; i++) {
  92.             if(dist[i] != INF){
  93.                 total = max(total, dist[i]);
  94.             }
  95.         }
  96.  
  97.     }
  98.  
  99.    cout << total;
  100.  
  101.     return 0;
  102. }
Add Comment
Please, Sign In to add comment