zoukankan      html  css  js  c++  java
  • P1137 旅行计划

    最开始拿到这一道题,感觉是树的结构,但是仔细推了一次样例之后,发现这是个图论,因为样例中的某些节点有子节点,但是和其他父节点连在一起,但是思路应该和树差不多,还是先用vector建图

    建完图后,会发现一个城市的答案肯定与连接他的城市有关,这样的话就想到了DP(然后我DP很菜)。对于城市x,显然初始值有 f [ x ] = 1,那么状态转移方程就应该为 f [ x ] = max ( f[x] , dp(a [ x ] [ i ]) ),其中 a [ x ] [ i ] 为连接x的城市。这样这道题的代码就很好写了

    #include<bits/stdc++.h>
    using namespace std;
    int n,m;
    vector<int> a[200005];
    int f[200005];
    int dp(int x){
    	if(f[x]!=-1) return f[x];
    	f[x]=1;
    	for(register int i=0;i<a[x].size();i++){
    		f[x]=max(f[x],dp(a[x][i])+1);
    	}
    	return f[x];
    }
    int main(){
    	scanf("%d%d",&n,&m);
    	fill(f+1,f+1+n,-1);
    	for(register int i=1;i<=m;i++){
    		int x,y;
    		scanf("%d%d",&x,&y);
    		a[y].push_back(x);
    	}
    	for(register int i=1;i<=n;i++){
    		printf("%d
    ",dp(i));
    	}
    	return 0;
    }
    
  • 相关阅读:
    Synchronized和Lock的实现原理和锁升级
    如何禁止CPU指令重排
    MESI缓存一致性
    归并排序
    强软弱虚四种引用和ThreadLocal内存泄露
    VINS-Mono代码分析与总结(完整版)
    IMU误差模型与校准
    小感
    K8S conul部署
    Centos Consul集群及Acl配置
  • 原文地址:https://www.cnblogs.com/Poetic-Rain/p/13081213.html
Copyright © 2011-2022 走看看