• D. Two Paths---cf14D(树的直径)


    题目链接:http://codeforces.com/problemset/problem/14/D

    题意:有n个city ; n-1条路:求断开一条路之后分成的两部分所构成的树的直径的积最大是多少;

    n的取值范围不大,所以可以采用暴力枚举的方法’;

    #include <iostream>
    #include <stdio.h>
    #include <string.h>
    #include <algorithm>
    #include <stdlib.h>
    #include <queue>
    #include <map>
    
    using namespace std;
    
    typedef long long LL;
    
    #define met(a, b) memset(a, b, sizeof(a))
    #define INF 0x3f3f3f3f
    #define N 210
    
    int G[N][N], n, vis[N], dist[N], Max, Index;
    
    void bfs(int s)
    {
        met(vis, 0);
        vis[s] = 1;
        dist[s] = 0;
    
        queue<int> Q;
    
        Q.push(s);
        
        while( Q.size() )
        {
            int p = Q.front();
            Q.pop();
    
            for(int i=1; i<=n; i++)
            {
                if( !G[p][i] )continue;
    
                if( !vis[i] )
                {
                    vis[i] = 1;
    
                    dist[i] = dist[p] + 1;
    
                    Q.push(i);
    
                    if(dist[i] > Max)
                    {
                        Max = dist[i];
    
                        Index = i;
                    }
                }
            }
        }
    }
    
    int main()
    {
        int a[N], b[N];
    
        while(scanf("%d", &n)!=EOF)
        {
            met(G, 0);
    
            for(int i=1; i<n; i++)
            {
                scanf("%d %d", &a[i], &b[i]);
    
                G[a[i]][b[i]] = G[b[i]][a[i]] = 1;
            }
    
            int Ans = 0;
    
            for(int i=1; i<n; i++)
            {
                G[a[i]][b[i]] = G[b[i]][a[i]] = 0;
    
                met(dist, 0);
                Max = Index = 0;
                bfs(a[i]);
                bfs(Index);
    
                int ans = Max;
    
                met(dist, 0);
                Max = Index = 0;
                bfs(b[i]);
                bfs(Index);
    
                Ans = max(Ans, ans * Max);
    
                G[a[i]][b[i]] = G[b[i]][a[i]] = 1;
            }
            printf("%d
    ", Ans);
        }
        return 0;
    }
    View Code
  • 相关阅读:
    Java运行时数据区域
    线程的实现原理
    redis分布式锁的实现
    Incorrect string value: 'xF0x9Fx92x8BTi...'错误
    linux命令之less命令
    Hive数据类型和DDL操作
    Hive安装、配置和使用
    CentOS 7安装配置MySQL 5.7
    Spring+SpringMVC+MyBatis整合
    MyBatis的事物管理和缓存
  • 原文地址:https://www.cnblogs.com/zhengguiping--9876/p/5271880.html
Copyright © 2020-2023  润新知