Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- typedef long long int ll;
- #define INF LLONG_MAX
- vector<ll> dist(100005,INF);
- vector<bool> visited(100005,false);
- vector<bool> p(100005,false);
- ll n,m,a,b,c;
- vector<ll> adj[100005];
- vector<ll> g[100005];
- void dfs(ll s , ll q){
- if(p[s] == true) return;
- p[s] = true;
- g[q].push_back(s);
- for(auto u : adj[s]) dfs(u,q);
- }
- void dijkstra(ll s){
- for(ll i = 0; i < n; i++){
- dist[i] = INF;
- visited[i] = false;
- }
- priority_queue<pair<ll,ll>> q;
- dist[s] = 0;
- q.push({0,s});
- while(!q.empty()){
- ll a = q.top().second;
- q.pop();
- if(visited[a] == true) continue;
- visited[a] = true;
- for(auto u : adj[a]){
- if(dist[a] + 1 < dist[u]){
- dist[u] = dist[a]+1;
- q.push(make_pair(-dist[u],u));
- }
- }
- }
- }
- int main() {
- cin >> n >> m;
- vector<ll> outdegree(n+5);
- for(ll i = 0; i < m; i++){
- cin >> a >> b;
- outdegree[a-1]++;
- outdegree[b-1]++;
- adj[a-1].push_back(b-1);
- adj[b-1].push_back(a-1);
- }
- ll total = -INF;
- ll c = 0;
- for(ll i = 0; i < n; i++){
- if(p[i] == true) continue;
- g[c].push_back(i);
- dfs(i,c);
- c++;
- }
- for(ll y = 0; y < c; y++) {
- ll best = 0;
- ll node;
- for(auto z : g[y]){
- if(outdegree[z] > best){
- node = z;
- best = outdegree[z];
- }
- }
- dijkstra(node);
- for (ll i = 0; i < n; i++) {
- if(dist[i] != INF){
- total = max(total, dist[i]);
- }
- }
- }
- cout << total;
- return 0;
- }
Add Comment
Please, Sign In to add comment