• 2017-2018 ACM-ICPC, Asia Daejeon Regional Contest C(记忆化搜索)


    C题

    Problem C Game Map

    思路:

    之前暴力搜索写了好几发,一直超时,后面看其他人的题解发现要用记忆化搜索。。直接暴力搜的话有太多重

    复的计算。

    dist u 表示以u 为起点所能走的最长路径,通过dfs不断递归能获得以u为起点的最长路径,这条路径上的每个点

    的dist必定是最大的(因为如果不是的话就会继续搜下去),当其他路径经过这些点是时直接加上他们的dist就

    行了,这样就节省了非常多的操作,降低复杂度。

    实现代码:

    #include<bits/stdc++.h>
    using namespace std;
    int dist[100009];
    vector<int>g[100009];
    int dp(int u){
        if(dist[u]==-1){
            dist[u] = 1;
            for(int i = 0;i < g[u].size();i++){
                int v = g[u][i];
                if(g[v].size() > g[u].size())
                    dist[u] = max(dist[u],dp(v)+1);
            }
        }
        return dist[u];
    }
    
    int main()
    {
        int m,n,x,y;
        ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
        memset(dist,-1,sizeof(dist));
        cin>>n>>m;
        while(m--){
            cin>>x>>y;
            g[x].push_back(y);
            g[y].push_back(x);
        }
        int ans = 0;
        for(int i = 0;i < n;i ++){
            ans = max(ans,dp(i));
        }
        cout<<ans<<endl;
    }
  • 相关阅读:
    nyist_21(三个水杯)(BFS)
    寒假刷题之普通之红与黑
    寒假刷题之普通之变形课
    寒假刷题之普通之最小差
    什么是 Spring Boot
    择业十诫----与内心的渴望同行
    模式窗体中调用父页面Javascript
    二级域名解析
    软件测试
    网狐系统介绍
  • 原文地址:https://www.cnblogs.com/kls123/p/8433593.html
Copyright © 2020-2023  润新知