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;
    }
    
  • 相关阅读:
    BZOJ 1500 维修数列
    BZOJ 1501 智慧珠游戏
    BZOJ 1507 Editor
    BZOJ 3223 文艺平衡树
    BZOJ 3224 普通平衡树
    BZOJ 3196 二逼平衡树
    BZOJ 1048 分割矩阵
    BZOJ 1047 理想的正方形
    BZOJ 1046 上升序列
    BZOJ 1045 糖果传递
  • 原文地址:https://www.cnblogs.com/Poetic-Rain/p/13081213.html
Copyright © 2011-2022 走看看