P1137 旅行计划

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

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

#include
using namespace std;
int n,m;
vector 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

你可能感兴趣的:(P1137 旅行计划)